PHP:md5(和sha1)的输入字符串必须是纯字母数字


PHP: input string for md5 (and sha1) must be purely alphanumeric?

使用PHP函数md5()(和sha1())和像'aabbccdd'这样的字符串可以完美地工作。但是,将相同的函数与"a-b+ccdd"一起使用似乎不会产生一致的结果。

第一个问题:输入字符串是否严格为字母数字,即 [A-Z][a-z][0..9] ?

第二个问题:为什么使用两个不同的 php 文件得到完全不同的结果,如下所示:

文件 1:

<?php
  $pwd = $_GET['pwd'];
  echo sha1($pwd); 
?>

和文件 2(仅其开头):

<?php session_start(); 
  $username = $_POST["username"];
  $pass = $_POST["password"];
  $password = sha1($pass); 
  echo "<br>pwd = " . $pass . "<br>PWD(SHA1) = " . $password . "<br>";

有人看到出了什么问题吗?

MD5 很乐意接受您喜欢的任何输入。

您遇到了一个不同的问题:某些字符在通过 URL 发送时将被编码,因此例如"+"将被视为表示空格 (" "),依此类推。

换句话说,你发送a-b+cc,但接收的PHP脚本将"看到"a-b cc,因此md5()的输出将与你的预期不同。

在将其提供给 md5() 之前,您必须在之前对字符串进行编码,或者在之后解码它们,同时考虑到它们可能被错误编码。第二个选项要尴尬得多(您会收到一个" ",并且不知道它是空格还是加号!因此,除非绝对没有其他方法,否则请在发送之前尝试对字符串进行正确编码。例如,请参阅:在 JavaScript 中编码 URL?