2016-07-29 8 views
2

私は次の問題に直面しました:文字列strmd5 bytestring hashに変換しようとしました。 PHPではmd5(str, true)を使用できますが、JS(nodejs express)では同じ結果を受け取る方法が見つかりません。 npmモジュールjs-md5が含まれていますが、このモジュールのarrayBufferメソッドは別の結果を返します(PHP md5(str、true)からの相違点)。NodeJS md5 PHPのようなmd5(str、true)

誰か助けてください。

おかげ

答えて

0

使用CryptoJSモジュール: NPM link here

など、何かの操作を行います。そして、あなたのコードや使用方法では、この "ツール" オブジェクトをインスタンス化

// Requires 
var crypto = require('crypto'); 

// Constructor 
function Crypto() { 
    this.hash; 
} 

// Hash method 
Crypto.prototype.encode = function(data) { 
    this.hash = crypto.createHash('md5').update(data); 
    var result = this.hash.digest('hex'); 
    return result; 
}; 

// Comparison method (return true if === else false) 
Crypto.prototype.equals = function(data, model) { 
    var bool = false; 
    var data = data.toUpperCase(); 
    var model = String(model).toUpperCase(); 
    if (data == model){ 
     bool = true; 
    } else { 
     bool = false; 
    } 
    return bool; 
}; 

// Exports 
module.exports = Crypto; 


AES、SHA256などの別の暗号化方式でも同じことができます。
返されたvarをバイナリ形式で簡単に変換することができるraw_outputオプション(バイナリ回答、16ビットで埋められます)について単純な関数は、this SO postを参照してください方法を知っている。 楽しんでください。

0

短い答え:

const crypto = require('crypto'); 
const buffer = crypto.createHash('md5').update(str).digest(); 

長い答え:あなたはNodeJS」デフォルトcryptoモジュールユーティリティ関数とクラスが含まれ、(ここでは、依存関係は必要ありません)を使用する必要があります。同期メソッドまたは非同期メソッドを使用してハッシュ(たとえば、MD5またはSHA-1ハッシュ)を作成することができます。 crypto.createHash(algorithm)という短いユーティリティ関数は、最小限のコーディングでハッシュを作成するのに便利です。 the docsが指定通り:

algorithmは、プラットフォーム上のOpenSSLのバージョンでサポートされている利用可能なアルゴリズムに依存しています。例は'sha256','sha512'などです。OpenSSLの最近のリリースでは、openssl list-message-digest-algorithmsに利用可能なダイジェストアルゴリズムが表示されます。あなたが尋ねたよう

さて、このcreateHash関数は、ストリームで使用できるHashオブジェクトを返し、または文字列(あなたはそれをファイル、HTTPリクエストなどを養うことができます)。文字列を使用する場合は、hash.update(string)を使用してハッシュします。このメソッドはハッシュ自体を返します。.digest(encoding)と連鎖して文字列(encodingが設定されている場合)またはBuffer(存在しない場合)を生成できます。あなたがバイトを要求したので、私はBufferがあなたが望むものだと信じています(BufferUint8Arrayです)。

+0

あなたは絶対に正しいです、私はこれを急いで書き、それを忘れました。私の答えを編集させてください。 – Iso

+0

あなたの答えが古いものよりはるかに優れているので、以前のコメントは削除しました。どうも ;)。 追加情報:ハッシュを2回消化しようとしないでください。そうしないとエラーが発生します。ハッシュは一度だけ消化する必要があります。たとえば、2つのパスワードを比較した場合、オブジェクトのタイプ(入力の場合は文字列、データベースの結果セットなどのオブジェクトの場合はオブジェクト属性)を処理します。そのため、 "equals "メソッド(Javaの.equals()に触発されています)。 – Aethyn