3

Node.js Crypto APIを理解しようとして、16 進表示のためにパイプで渡される同等のOpenSSL encコマンド ライン (読みやすくするために改行を挿入) にコードを一致させようとしました。xxd

$ echo -n "The quick brown fox jumps over the lazy dog" | openssl enc -aes256 -e
  -K "a891f95cc50bd872e8fcd96cf5030535e273c5210570b3dcfa7946873d167c57"
  -iv "3bbdce68b2736ed96972d56865ad82a2"  | xxd -p -c 64
582178570b7b74b000fd66316379835809874f985e0facadabb5b9c6b00593171165ae21c091f5237cea1a6fd939fd14

ただし、 を実行するnode test-aes.jsと、次の出力が得られます。

b8f995c4eb9691ef726b81a03681c48e

これは、予想される出力と一致しません (長さの 3 分の 1 です)。これが私のtest-aes.jsファイルです:

var crypto = require("crypto");

var testVector = { plaintext : "The quick brown fox jumps over the lazy dog",
    iv : "3bbdce68b2736ed96972d56865ad82a2",
    key : "a891f95cc50bd872e8fcd96cf5030535e273c5210570b3dcfa7946873d167c57",
    ciphertext : "582178570b7b74b000fd66316379835809874f985e0facadabb5b9c6b00593171165ae21c091f5237cea1a6fd939fd14"};

var key = new Buffer(testVector.key, "hex");
var iv = new Buffer(testVector.iv, "hex");
var cipher = crypto.createCipher("aes256", key, iv);
cipher.update(testVector.plaintext, "utf8");
var crypted = cipher.final("hex");
console.log(crypted);

質問: OpenSSL パラメーターを Node.js Crypto API にマッピングする際にどこが間違っていますか?

4

1 に答える 1

3

どうぞ:

var cipher = crypto.createCipheriv("aes256", key, iv);
var crypted = cipher.update(testVector.plaintext, "utf8", "hex");
crypted += cipher.final("hex");
console.log(crypted);

元のコードに 2 つの問題があります

  1. createCipherは間違った関数です。使用する必要がありますcreateCipheriv
  2. updateには戻り値があるため、それを追跡する必要があります。
于 2013-03-04T03:14:07.130 に答える