問題
crypto.createHash
を使用してmd5
ハッシュを生成するnode.jsモジュールがあります。
最近、crypto
モジュールによって生成されたハッシュが新しいバージョンで異なることに気づきました。
コード
require('crypto').createHash('md5').update('¥').digest('hex')
Node.js v0.10.0
出力:ab3af8566ddd20d7efc9b314abe90755
Node.js v6.1.0
出力:07625e142e4ac5961de57472657a88c1
質問
新しいバージョンでそれを引き起こす原因と、これを解決するにはどうすればよいのでしょうか。
更新
GitHubでの同様の問題:
Node v6 +の一部の入力は、以前のNodeバージョンとは異なるハッシュを計算します。
基本的に、文字列を.update()
に渡すと、Node v6より前のバージョンではデフォルトのエンコーディングはbinary
でしたが、Node _utf-8
_に変更されたv6。
たとえば、次のコードを考えてみましょう。
_require('crypto').createHash('md5').update('¥').digest('hex')
_
これにより、_ab3af8566ddd20d7efc9b314abe90755
_ on Node pre-6および_07625e142e4ac5961de57472657a88c1
_ on Node 6。
Node 6で6より前のバージョンと同じように出力する場合は、.update()
にbinary
エンコーディングを使用するように指示する必要があります。
_require('crypto').createHash('md5').update('¥', 'binary').digest('hex')
_
またはその逆(Node pre-6出力を6と同じにする):
_require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex')
_
Githubでこの問題をマークするのと同じように: https://github.com/nodejs/node/issues/681 は、v5/v6でutf8
に変更されたダイジェストのデフォルトのエンコーディングに関するものですv4以前では、それはbinary
でした。