当我在PHP中使用SHA1生成无盐哈希时,它与我让MySQL服务器处理它时不同。为什么会这样?
有什么办法可以解决这个问题,这样哈希就一样了吗?我猜如果散列已经生成了,那就太晚了?
<?php
$p = 'password';
$p2 = SHA1('$p');
...INSERT INTO table (pass1, pass2) VALUES (SHA1('$p'), '$p2')...
?>
编辑:
它看起来像是在散列"sha1('$p')"而不是密码。
第2版:
我是个白痴。我把"放在SHA1中。哎呀!
很抱歉浪费您的时间
此代码:
$p2 = SHA1('$p');
将实际散列$p
的文字,而不是$p
的content。你应该做:
$p2 = SHA1($p);
这是因为当使用单引号时,PHP不会解释变量和转义序列。手册中提到了这一点:
注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列出现在单引号字符串中时不会展开。
它可能是PHP用于SHA1编码的字符集。如果MySQL使用Unicode,而PHP使用ASCII,那么会有不同的结果。
PHP的sha1函数中的$raw_output标志会影响生成的哈希返回的格式。如果它为false,那么您将从函数中获得一个40位的十六进制数字作为字符串。如果它被设置为true,那么你会得到一个20位的原始二进制数字。它默认为false。
http://uk.php.net/sha1