朋友我的php 5.2代码保存了我的密码
echo '<br>'.base64_encode(mhash(MHASH_MD5,'test'));
result CY9rzUYh03PK3k6DJie09g==
在php 5.3中,mhash扩展已被Hash淘汰,就像我在那里看到的文档一样。所以我试过这样的。但它给出了错误的结果。
echo '<br>'.base64_encode(hash(MD5,'test'));
result MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY=
请帮我将5.2 mhash代码转换为5.3。
由于
答案 0 :(得分:3)
实际上,它们是相同的,只是采用不同的格式。 第一个是二进制数据,第二个是十六进制。 您可以使用此函数将第一个转换为第二个:
$second_hash = bin2hex ($first_hash);
或者相反:
$first_hash = hex2bin ($second_hash);
添加此功能:
define('HEX2BIN_WS', " \t\n\r");
function hex2bin($hex_string) {
$pos = 0;
$result = '';
while ($pos < strlen($hex_string)) {
if (strpos(HEX2BIN_WS, $hex_string{$pos}) !== FALSE) {
$pos++;
} else {
$code = hexdec(substr($hex_string, $pos, 2));
$pos = $pos + 2;
$result .= chr($code);
}
}
return $result;
}
答案 1 :(得分:2)
如果要使用sha1将过时的mhash()方法更新为hash_hmac()方法,只需替换:
mhash(MHASH_SHA1, $data, $key)
到
hash_hmac('sha1', $data,$key,true)
在我的上下文中,我遇到了旧的代码
base64_encode(mhash(MHASH_SHA1, $data, $key));
我替换为
base64_encode(hash_hmac('sha1', $data,$key,true));
我希望它可以提供帮助。
答案 2 :(得分:0)
mhash(MHASH_MD5, 'FOOBAR'); // what you have
pack('H*', hash(MD5, 'FOOBAR')) // what you accepted
pack('H*', md5('FOOBAR')); // ...
md5('FOOBAR', true); // what you could/should have used
我知道这个问题相当陈旧,但今天我遇到了同样的问题。基于这篇文章,我能够找到一个更短的,我想更高性能的方式,值得在我看来分享。