【发布时间】:2019-03-04 03:28:01
【问题描述】:
我想在客户端加密文件并将其发送到服务器端并 解密
但是当我使用内置的节点 js crypto 时,我得到了错误
client.js
const crypto = require('crypto');
const cipher = crypto.createCipher('aes192', 'a password');
const encInput = fs.createReadStream("abc.txt");
const encOutput = fs.createWriteStream("abc.txt.enc");
encInput.pipe(cipher).pipe(encOutput).on('close', function() {
// DATA SENT TO SERVER SIDE
//USING PIPELINE TO SEND DATA TO SERVER
});
这部分做得很完美,它在客户端创建一个加密文件并将其发送到服务器端
服务器.js
//receive Data
//AFTER RECEIVING FILE ON this side I run decrypt script
const crypto = require('crypto');
const decipher = crypto.createDecipher('aes192', 'a password');
const decInput = fs.createReadStream("abc.txt.enc");
const decOutput = fs.createWriteStream("abc.txt");
decInput.pipe(decipher).pipe(decOutput);
这会报错
Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
at Decipher._flush (internal/crypto/cipher.js:141:28)
at Decipher.prefinish (_stream_transform.js:141:10)
at Decipher.emit (events.js:182:13)
at prefinish (_stream_writable.js:630:14)
at finishMaybe (_stream_writable.js:638:5)
at afterWrite (_stream_writable.js:481:3)
at onwrite (_stream_writable.js:471:7)
at Decipher.afterTransform (_stream_transform.js:94:3)
at Decipher._transform (internal/crypto/cipher.js:136:3)
at Decipher.Transform._read (_stream_transform.js:190:10)
Emitted 'error' event at:
at Decipher.onerror (_stream_readable.js:687:12)
at Decipher.emit (events.js:182:13)
at done (_stream_transform.js:208:19)
at _flush (_stream_transform.js:142:7)
at Decipher._flush (internal/crypto/cipher.js:143:5)
at Decipher.prefinish (_stream_transform.js:141:10)
[... lines matching original stack trace ...]
at afterWrite (_stream_writable.js:481:3)
我知道客户端没有问题,它正在使用管道套接字完美发送数据
**在服务器端接收数据也没有问题,只是解密造成了问题,我知道为什么**
关于我的代码你还想知道什么
使用节点 v10.6.0
【问题讨论】:
-
上传后在客户端和服务器上比较
abc.txt.enc文件。他们平等吗?两个文件编码相同? -
@Lemix 是的,两者都是一样的......我现在看到的是在服务器端它完美地解密了文件但之后给出了这个错误......
-
我现在发现的是,当我用相同的代码解密在客户端制作的文件时,它工作正常,但如果我用相同的代码解密在服务器端收到的文件,它会给我这个错误跨度>
-
尝试使用初始化向量(
createCipheriv和createDecipheriv方法)。我的答案中的示例。 -
我重现了类似的错误。我设法通过使用 base64 编码来解决它。
标签: node.js encryption