Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 节点加密解密流抛出EVP_DecryptFinal_ex:如果流将被中断,则错误的最终块长度_Javascript_Node.js_Encryption_Stream_Aes - Fatal编程技术网

Javascript 节点加密解密流抛出EVP_DecryptFinal_ex:如果流将被中断,则错误的最终块长度

Javascript 节点加密解密流抛出EVP_DecryptFinal_ex:如果流将被中断,则错误的最终块长度,javascript,node.js,encryption,stream,aes,Javascript,Node.js,Encryption,Stream,Aes,我有一个node.js客户端,它从另一台主机下载并解密AES加密文件 var base64 = require('base64-stream'); var crypto = require('crypto'); var aes = crypto.createDecipher('aes-256-cbc', crypto.createHash('sha256').update(pass).digest('hex')); // file stream var file = fs.createWrit

我有一个node.js客户端,它从另一台主机下载并解密AES加密文件

var base64 = require('base64-stream');
var crypto = require('crypto');
var aes = crypto.createDecipher('aes-256-cbc', crypto.createHash('sha256').update(pass).digest('hex'));

// file stream
var file = fs.createWriteStream(params.target);
var base64reader = base64.decode();
response.pipe(base64reader)  // decode base64
        .pipe(aes)              // decrypt
        .pipe(file);            // write in file

// on last data chunk received: file load complete
aes.on('end', function (chunk) {
    if (typeof params.success !== 'undefined')
        params.success();
});
如果另一台主机在完成请求之前意外地关闭了连接,则上面的代码会抛出此错误:

TypeError: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
    at Decipher.Cipher._flush (crypto.js:262:27)
    at Decipher.eval (_stream_transform.js:130:12)
    at Decipher.g (events.js:187:16)
    at Decipher.EventEmitter.emit (events.js:95:17)
    at prefinish (_stream_writable.js:427:12)
    at finishMaybe (_stream_writable.js:435:7)
    at afterWrite (_stream_writable.js:317:3)
    at onwrite (_stream_writable.js:307:7)
    at WritableState.onwrite (_stream_writable.js:100:5)
    at afterTransform (_stream_transform.js:99:5)
    at TransformState.afterTransform (_stream_transform.js:74:12)
    at Decipher.Cipher._transform (crypto.js:258:3)
    at Decipher.Transform._read (_stream_transform.js:179:10)
    at Decipher.Readable.read (_stream_readable.js:334:10)
    at flow (_stream_readable.js:743:26)
    at WriteStream.eval (_stream_readable.js:601:7)
我尝试添加一个aes.on('error',函数((){…});处理程序,但它不会被调用。我还尝试添加

response.on('end', function() { aes.emit('close'); });
response.on('close', function() { aes.emit('close'); });
但是不会调用aes.on('end',…);将aes.emit('end')添加到此语句没有意义,因为如果出现导致上述错误的错误,也会调用此语句

response.on('end', function() { aes.emit('end'); aes.emit('close'); });
response.on('close', function() { aes.emit('end'); aes.emit('close'); });
有人知道我怎样才能抓住这个错误吗


非常感谢!!

这是node.js v0.11.9中的一个bug,在v0.11.13中得到了解决。然后是aes.on('error',…)将被正确调用。

感谢您的回复,Toby。尝试使用具有大量追随者的标签,以获得更大的成功,即使我没有定期查看AES标签。哇,在我看来,这似乎仍然存在。在使用管道时,我无法发现此错误。