0

将 PHP 函数 md5()(和 sha1() 以及)与 'aabbccdd' 之类的字符串一起使用非常有效。但是,使用与 'a-b+ccdd' 相同的函数似乎不会产生一致的结果。

第一个问题:输入字符串是否必须是严格的字母数字,即 [AZ][az][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>";

有谁看到出了什么问题?

4

1 回答 1

4

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

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

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

您必须先对字符串进行编码,或者在将字符串输入到md5(). 第二个选项更尴尬(你收到一个“”,并且不知道它是空格还是加号!);因此,除非绝对没有其他方法,否则请在发送前尝试正确编码字符串。参见例如:在 JavaScript 中编码 URL?

于 2013-01-22T14:19:27.673 回答