使用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>";
有谁看到出了什么问题?
答案 0 :(得分:4)
MD5很乐意接受你喜欢的任何输入。
您遇到了另一个问题:某些字符在通过URL发送时会被编码,因此例如“+”将被视为表示空格(“”),依此类推。
换句话说,您发送a-b+cc
,但接收的PHP脚本会“看到”a-b cc
,因此md5()
的输出将与您的预期不同。
在将字符串输入md5()
之前,您将要么对字符串进行编码,要么在之后对其进行解码,并考虑到它们可能被错误编码。第二个选项更加尴尬(你收到一个“”,并且不知道它是空格还是加号!);所以,除非完全没有其他方式,否则请在发送之前对字符串进行正确编码。例如,请参阅:Encode URL in JavaScript?