我希望在客户端加密文件并将其发送到服务器端进行解密,但在使用内置的crypto(node js)时出现错误。
这部分已经完美地完成了任务,它在客户端创建了一个加密文件并将其发送到服务器端。
我知道客户端没有问题,使用管道套接字完美地发送数据。 在服务器端也没有接收数据的问题,只有解密出现问题,我不知道为什么。 如果你需要了解我代码方面的其他信息,请告诉我。 使用 Node v10.6.0。
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
});
这部分已经完美地完成了任务,它在客户端创建了一个加密文件并将其发送到服务器端。
Server.js
//接收数据
//在这一端接收到文件后,我运行解密脚本
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)
我知道客户端没有问题,使用管道套接字完美地发送数据。 在服务器端也没有接收数据的问题,只有解密出现问题,我不知道为什么。 如果你需要了解我代码方面的其他信息,请告诉我。 使用 Node v10.6.0。
abc.txt.enc
文件。它们是否相同?这两个文件使用相同的编码吗? - LemixcreateCipheriv
和createDecipheriv
方法)。示例在我的回答中。 - Lemix