1

朋友们,我的 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。

谢谢

4

3 回答 3

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;
}
于 2012-05-13T14:59:44.603 回答
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));

我希望它可以帮助。

于 2014-10-14T13:24:54.767 回答
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

我知道这个问题已经很老了,但今天我遇到了同样的问题。基于这篇文章,我能够找到一种更短且性能更高的方式,我认为这值得分享。

于 2013-09-02T15:34:47.663 回答