4

Node.js Crypto ライブラリと、それを自分の状況で適切に使用する方法を理解しようとしています。

私の目標は:

16 進文字列 3132333435363738313233343536373831323334353637383132333435363738 のキー

16 進文字列のテキスト 46303030303030303030303030303030

16 進文字列の暗号化テキスト 70ab7387a6a94098510bf0a6d972aabe

AES 256 の AC 実装とhttp://www.hanewin.net/encrypt/aes/aes-test.htmの Web サイトでこれをテストしています。

これは私が今までしなければならないことです。私が期待するようには機能していません。私の最善の推測は、暗号関数の入力と出力の型が正しくないということです。16進数を使用すると、v8エラーで失敗する唯一の機能はutf8です。それを機能させるために何を変換または変更する必要があるかについてのアイデア。

var keytext = "3132333435363738313233343536373831323334353637383132333435363738";
var key = new Buffer(keytext, 'hex');
var crypto = require("crypto")
var cipher = crypto.createCipher('aes-256-cbc',key,'hex');
var decipher = crypto.createDecipher('aes-256-cbc',key,'hex');

var text = "46303030303030303030303030303030";
var buff = new Buffer(text, 'hex');
console.log(buff)
var crypted = cipher.update(buff,'hex','hex')

この例の暗号化された出力は 8cfdcda0a4ea07795945541e4d8c7e35 であり、これは私が期待するものではありません。

4

1 に答える 1

1

aes-256-cbcテストベクトルを派生させているWebサイトがモードを使用しているときに、コードが使用されていecbます。また、あなたは を呼び出していますcreateCipherが、ECB ではcreateCipherivIV なしで使用する必要があります ( nodeJS: can't get crypto module to give me right AES cipher resultsを参照)。

これを示すコードを次に示します。

var crypto = require("crypto");

var testVector = { plaintext : "46303030303030303030303030303030",
    iv : "",
    key : "3132333435363738313233343536373831323334353637383132333435363738",
    ciphertext : "70ab7387a6a94098510bf0a6d972aabe"};

var key = new Buffer(testVector.key, "hex");
var text = new Buffer(testVector.plaintext, "hex");
var cipher = crypto.createCipheriv("aes-256-ecb", key, testVector.iv);
var crypted = cipher.update(text,'hex','hex');
crypted += cipher.final("hex");
console.log("> " + crypted);
console.log("? " + testVector.ciphertext);

そのコードを実行したときの出力は、私が期待するものとはまったく異なりますが、暗号化された出力の最初のブロックはあなたの期待と一致しています。おそらく、微調整が必​​要な別のパラメーターです。

$ node test-aes-ecb.js 
> 70ab7387a6a94098510bf0a6d972aabeeebbdaed7324ec4bc70d1c0343337233
? 70ab7387a6a94098510bf0a6d972aabe
于 2015-01-12T15:48:54.637 に答える