14

問題

ハッシュcrypto.createHashの生成に使用している node.js モジュールがあります。md5

crypto最近、モジュールによって生成されたハッシュが新しいバージョンで異なることに気付きました:

コード

require('crypto').createHash('md5').update('¥').digest('hex')

Node.js v0.10.0

出力:ab3af8566ddd20d7efc9b314abe90755

Node.js v6.1.0

出力:07625e142e4ac5961de57472657a88c1

質問

新しいバージョンで何が原因なのか、どうすれば解決できるのか疑問に思っていましたか?

アップデート

GitHub での同様の問題:

4

2 に答える 2

27

Node v6+ の一部の入力は、以前の Node バージョンとは異なるハッシュを計算します。

基本的に、文字列を に渡すと、.update()v6 より前の Node バージョンではデフォルトのエンコーディングが でしbinaryたが、Node v6 では に変更されましたutf-8

たとえば、次のコードを見てください。

require('crypto').createHash('md5').update('¥').digest('hex')

これはノード 6 よりab3af8566ddd20d7efc9b314abe90755前と07625e142e4ac5961de57472657a88c1ノード 6 で出力されます。

Node 6 が 6 より前のバージョンと同じように出力するようにするには、エンコーディング.update()を使用するように指示する必要があります。binary

require('crypto').createHash('md5').update('¥', 'binary').digest('hex')

またはその逆 (ノード 6 より前の出力を 6 と同じにする):

require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex')
于 2016-05-25T19:04:44.660 に答える