当我在PHP中使用SHA1生成未加盐的哈希时,它与我让我的MySQL服务器处理它时不同。这是为什么?
有什么办法可以解决这个问题,所以哈希是一样的吗?如果已经生成哈希值,那我猜太晚了?
<?php
$p = 'password';
$p2 = SHA1('$p');
...INSERT INTO table (pass1, pass2) VALUES (SHA1('$p'), '$p2')...
?>
编辑:
看起来它是哈希“sha1('$ p')”而不是密码。
EDIT2:
我是个白痴。我把''放在SHA1中。糟糕!
抱歉浪费你的时间
答案 0 :(得分:2)
此代码:
$p2 = SHA1('$p');
实际上会散布文字 $p
,而不是$p
的内容。你应该这样做:
$p2 = SHA1($p);
这是因为使用单引号时PHP不会解释变量和转义序列。这在manual:
中提到注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中不会扩展。
答案 1 :(得分:0)
PHP的sha1函数中的$ raw_output标志会影响返回生成的哈希的格式。如果为false,那么您将获得一个40位十六进制数作为函数的字符串。如果设置为true,那么您将获得原始二进制20位数字。它默认为false。
答案 2 :(得分:0)
它可能是PHP用于SHA1编码的字符集。如果MySQL使用的是Unicode,但PHP使用的是ASCII,则会有不同的结果。