Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将OpenSSL命令行AES加密映射到NodeJS加密API等效项_Javascript_Node.js_Cryptography_Openssl_Aes - Fatal编程技术网

Javascript 将OpenSSL命令行AES加密映射到NodeJS加密API等效项

Javascript 将OpenSSL命令行AES加密映射到NodeJS加密API等效项,javascript,node.js,cryptography,openssl,aes,Javascript,Node.js,Cryptography,Openssl,Aes,在试图理解API的过程中,我一直在尝试将代码与等效的命令行(插入换行符以提高可读性)相匹配,该命令行通过管道进行十六进制显示 $ echo -n "The quick brown fox jumps over the lazy dog" | openssl enc -aes256 -e -K "a891f95cc50bd872e8fcd96cf5030535e273c5210570b3dcfa7946873d167c57" -iv "3bbdce68b2736ed96972d56865a

在试图理解API的过程中,我一直在尝试将代码与等效的命令行(插入换行符以提高可读性)相匹配,该命令行通过管道进行十六进制显示

$ echo -n "The quick brown fox jumps over the lazy dog" | openssl enc -aes256 -e
  -K "a891f95cc50bd872e8fcd96cf5030535e273c5210570b3dcfa7946873d167c57"
  -iv "3bbdce68b2736ed96972d56865ad82a2"  | xxd -p -c 64
582178570b7b74b000fd66316379835809874f985e0facadabb5b9c6b00593171165ae21c091f5237cea1a6fd939fd14
但是,当我运行
节点测试aes.js
时,我得到以下输出:

b8f995c4eb9691ef726b81a03681c48e
这与我的预期输出不匹配(它甚至是长度的三分之一)。这是我的
测试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时,我哪里出错了?

这里是:

var cipher = crypto.createCipheriv("aes256", key, iv);
var crypted = cipher.update(testVector.plaintext, "utf8", "hex");
crypted += cipher.final("hex");
console.log(crypted);
您的原始代码有两个问题

  • createCipher
    是错误的函数,您应该使用
    createCipheriv
  • update
    有一个返回值,您需要跟踪它