使用SHA1()时,我的PHP和MySQL服务器如何生成不同的哈希值?

时间:2012-03-02 07:35:22

标签: php mysql

当我在PHP中使用SHA1生成未加盐的哈希时,它与我让我的MySQL服务器处理它时不同。这是为什么?

有什么办法可以解决这个问题,所以哈希是一样的吗?如果已经生成哈希值,那我猜太晚了?

<?php
$p = 'password';

$p2 = SHA1('$p');

...INSERT INTO table (pass1, pass2) VALUES (SHA1('$p'), '$p2')...


?>

编辑:

看起来它是哈希“sha1('$ p')”而不是密码。

EDIT2:

我是个白痴。我把''放在SHA1中。糟糕!

抱歉浪费你的时间

3 个答案:

答案 0 :(得分:2)

此代码:

$p2 = SHA1('$p');

实际上会散布文字 $p,而不是$p内容。你应该这样做:

$p2 = SHA1($p);

这是因为使用单引号时PHP不会解释变量和转义序列。这在manual

中提到
  

注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中不会扩展。

答案 1 :(得分:0)

PHP的sha1函数中的$ raw_output标志会影响返回生成的哈希的格式。如果为false,那么您将获得一个40位十六进制数作为函数的字符串。如果设置为true,那么您将获得原始二进制20位数字。它默认为false。

http://uk.php.net/sha1

答案 2 :(得分:0)

它可能是PHP用于SHA1编码的字符集。如果MySQL使用的是Unicode,但PHP使用的是ASCII,则会有不同的结果。