1

友達の私のphp5.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.2mhashコードを5.3に変換するのを手伝ってください。

ありがとう

4

3 に答える 3

3

実際には、それらは同じですが、形式が異なります。1つ目はバイナリデータで、2つ目は16進数です。この関数を使用して、最初の関数を2番目の関数に変換できます。

$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 に答える