使用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?