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

时间:2013-01-22 14:16:46

标签: php md5 sha1

使用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>";

有谁看到出了什么问题?

1 个答案:

答案 0 :(得分:4)

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

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

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

在将字符串输入md5()之前,您将要么对字符串进行编码,要么在之后对其进行解码,并考虑到它们可能被错误编码。第二个选项更加尴尬(你收到一个“”,并且不知道它是空格还是加号!);所以,除非完全没有其他方式,否则请在发送之前对字符串进行正确编码。例如,请参阅:Encode URL in JavaScript?