2017-06-30 9 views
2

自動増分番号のハッシュを作成しています。私はこれを達成しようとしている方法の2つのループ例を作成しました。crypto node.jsライブラリを使用すると、SHA-256ハッシュを複数連続して高速に作成できない

#1が実行されると、最初のハッシュがコンソールに記録され、2番目の繰り返しでループに次のエラーが返されます。エラー:すでに呼び出されているダイジェスト

これは、このドキュメントの参照によるものだと考えています。hash.digest()メソッドが呼び出された後、再度使用することはできません。複数の呼び出しが発生すると、エラーがスローされます。

ノードの暗号ライブラリを使用して一度に複数のハッシュを作成するループを作成するにはどうすればよいですか?

// Reproduce #1 
const crypto = require('crypto'); 
const hash = crypto.createHash('sha256'); 
for (let i = 0; i < 5; i++) { 
    hash.update('secret' + i); 
    console.log(hash.digest('hex')); 
} 
+2

あなたはノードのバージョンを使用しているあなたはそれを各反復で新鮮なハッシュインスタンスを作成することによって行うことができますか? #1では、あなたの 'for'ループの中で' const hash = crypto.createHash( 'sha256');を移動しなければなりませんでした(インスタンスは再利用できません)。 #2の場合、あなたは 'sha1256'を' sha256'にします –

+0

私はノードv8.1.2を持っています。誤字アラートをありがとう。最初のものは、ドキュメントから違反しているので動作しません。 'hash.digest()メソッドが呼び出されたあと、もう一度Hashオブジェクトを使用することはできません。複数の呼び出しによってエラーがスローされます。 – agm1984

+0

私の目的は、「APIs secret」に基づいていくつかの入力フィールドをハッシュすることに基づいてシリアル番号を作成するメソッドを作成することです。私がこのロジックや何かをそれに遠隔的に置くと失敗します。最初のものは有効なシリアルを作成しますが、それ以降のものは実際にエラーをスローしません。 '.digest()'や '.createHash()'のために無効なシリアルを作成します。 – agm1984

答えて

3

エラーが「ダイジェストが既に呼び出されている」場合、アイデアはハッシュを1回呼び出すことです。

const crypto = require('crypto'); 
for (let i = 0; i < 5; i++) { 
    const hash = crypto.createHash('sha256'); 
    hash.update('secret' + i); 
    console.log(hash.digest('hex')); 
} 

出力:

 
97699b7cc0a0ed83b78b2002f0e57046ee561be6942bec256fe201abba552a9e 
5b11618c2e44027877d0cd0921ed166b9f176f50587fc91e7534dd2946db77d6 
35224d0d3465d74e855f8d69a136e79c744ea35a675d3393360a327cbf6359a2 
e0d9ac7d3719d04d3d68bc463498b0889723c4e70c3549d43681dd8996b7177f 
fe2d033fef7942ed06d418992d35ca98feb53943d452f5994f96934d754e15cb 
関連する問題