javascript - Node crypto.createDecipher 错误的最终 block 长度错误

标签 javascript node.js encryption aes

我正在使用以下代码先加密再解密。

var fs = require('fs');
var crypto = require('crypto');

var ws = fs.createWriteStream('message.txt');
var rs = fs.createReadStream('message.txt');

var passPhrase = 'password';

process.stdin.pipe(crypto.createCipher('aes256', passPhrase)).pipe(ws);

ws.on('finish', function() {
    rs.pipe(crypto.createDecipher("aes256", passPhrase)).pipe(process.stdout); 
});

我将代码称为:

echo "randomstring" | node crypt.js

但我不断收到以下错误:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
    at Error (native)
    at Decipher.Cipher._flush (crypto.js:177:28)
    at Decipher.<anonymous> (_stream_transform.js:130:12)
    at Decipher.g (events.js:199:16)
    at Decipher.emit (events.js:104:17)
    at prefinish (_stream_writable.js:474:12)
    at finishMaybe (_stream_writable.js:482:7)
    at endWritable (_stream_writable.js:493:3)
    at Decipher.Writable.end (_stream_writable.js:459:5)
    at ReadStream.onend (_stream_readable.js:505:10)

我只是破译createCipher的输出,为什么我仍然得到错误的最终 block 长度错误?

message.txt 的内容在我的终端上出现乱码

kartik@kartik-lappy:~/stream-adventure$ cat message.txt 
�[��Z�*3��Kv�

kartik@kartik-lappy:~/stream-adventure$ wc -c message.txt 
16 message.txt

最佳答案

你应该在 message.txt 有一些内容后声明 readStream:

var fs = require('fs');
var crypto = require('crypto');

var ws = fs.createWriteStream('message.txt');

var passPhrase = 'password';

process.stdin.pipe(crypto.createCipher('aes256', passPhrase)).pipe(ws);

ws.on('finish', function() {
    var rs = fs.createReadStream('message.txt');
    rs.pipe(crypto.createDecipher("aes256", passPhrase)).pipe(process.stdout); 
});

关于javascript - Node crypto.createDecipher 错误的最终 block 长度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528784/

相关文章:

javascript - 在 vendor/lib 目录中包含 Rails 中的 js/css 模块

javascript - 如何解析模拟函数中的 Promise?

javascript - 客户端加密的有效用例是什么?

c# - GDPR : Encrypted logging in C#

javascript - 如何让 Webpack 使用 .hbs 文件?

javascript - 数据表客户端数据更改/重绘

javascript - ngResource 如何将 promise 附加到数组

node.js - 如何在 Sequelize 迁移中创建关联?

mysql - 如何在成功等待脚本后启动 docker 容器

java - 为什么我的 AES 密码会在初始化 DECRYPT_MODE 时抛出 InvalidKeyException