Javascript Node.js crypto aes-256-cbc-hmac-sha1不';行不通

Javascript Node.js crypto aes-256-cbc-hmac-sha1不';行不通,javascript,node.js,encryption,node-crypto,Javascript,Node.js,Encryption,Node Crypto,我正在尝试将aes-256-cbc-hmac-sha1算法用于 下面是一段代码片段,显示了我正在尝试执行的操作: //改编自http://stackoverflow.com/a/6046913 var crypto=require('crypto'); var data=“我是明文数据”; log('原始明文:'+数据); /////工作 //var算法='aes-128-cbc'; //var keyBuffer=加密随机字节(16); //var ivBuffer=加密随机字节(16); /

我正在尝试将aes-256-cbc-hmac-sha1算法用于

下面是一段代码片段,显示了我正在尝试执行的操作:

//改编自http://stackoverflow.com/a/6046913
var crypto=require('crypto');
var data=“我是明文数据”;
log('原始明文:'+数据);
/////工作
//var算法='aes-128-cbc';
//var keyBuffer=加密随机字节(16);
//var ivBuffer=加密随机字节(16);
//不起作用
var算法='aes-256-cbc-hmac-sha1';
var keyBuffer=加密随机字节(32);
var ivBuffer=加密随机字节(16);
//var算法='aes-256-cfb8';//好啊
//var keyBuffer=加密随机字节(32);
//var ivBuffer=加密随机字节(16);
//var算法='aes-128-cbc-hmac-sha1';//失败
//var keyBuffer=加密随机字节(16);
//var ivBuffer=加密随机字节(16);
变量clearEncoding='utf8';
var cipherEncoding='hex';
var cipher=crypto.createCipheriv(算法、keyBuffer、ivBuffer);
var cipherChunks=[];
push(cipher.update(数据、clearEncoding、CiphereEncoding));
加密块推送(cipher.final(cipherEncoding));
log('ciphertext',cipherChunks.join('');
var decipher=crypto.createDecipheriv(算法、密钥缓冲区、ivBuffer);
var plainChunks=[];
////突然
//var encrypted=cipherChunks.join(“”);
//push(解密、更新(加密、加密、clearEncoding));
////零碎
for(var i=0;i
没有包含HMAC的算法可以工作,但HMAC的算法不能。 在
解密.更新
步骤中失败。全输出:

Original cleartext: I am the clear text data
ciphertext 364ddcface495bcc4e7c8c895443143a632a98d0942b8c844d53db7d770fabca

crypto.js:279
  var ret = this._binding.update(data, inputEncoding);
                          ^
TypeError: error:00000000:lib(0):func(0):reason(0)
    at Decipheriv.Cipher.update (crypto.js:279:27)
    at Object.<anonymous> (../../crypto-example.js:44:29)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3
知道我做错了什么吗?或者这是加密模块中的错误? (使用节点0.10.26和0.10.28进行测试,结果相同。)

多谢各位


(注意,这也是一个bug:)

密码部分就是aes-256-cbc
部分。hmac部分只是
hmac-sha1

您必须创建两个对象,密码/解密实例和hmac实例。将密码/解密实例的输出与hmac实例一起使用,以创建一个用于验证目的的散列


aes-256-cbc-hmac-sha1
仅用于识别密码/验证等组合,而不是实际密码本身。

“aes-256-cbc-hmac-sha1”显示在crypto.getCiphers()返回的列表中。所以它显然是一个真正的密码。。。我认为你的陈述不正确。而且,它加密很好,只是解密有困难。如果它不是密码,我希望它在加密上也会失败。