我在node.js服务器上使用crypto对文件进行加密。当客户端随后下载文件并尝试使用crypto-js对其解密时,输出不正确。
这是我用来加密的代码:
var fileName = 'test.txt';
var key = Buffer.from(KEY_STRING, "utf8");
var iv = Buffer.from(IV_STRING, "utf8");
var cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
var input = fs.createReadStream(fileName);
var output = fs.createWriteStream(fileName + '.enc');
input.pipe(cipher).pipe(output);
客户端下载test.txt.enc,将其内容读入字符串(以下代码中的fileContent)并解密:
var decrypted = CryptoJS.AES.decrypt(
fileContent,
CryptoJS.enc.Utf8.parse(KEY_STRING),
{
iv: CryptoJS.enc.Utf8.parse(IV_STRING),
mode: CryptoJS.mode.CBC
}
);
var cleartext = CryptoJS.enc.Utf8.stringify(decrypted);
当客户端将WordArray转换回utf-8文本时,它将收到“错误:UTF-8数据格式错误”消息。文件正确接收,因为我使用哈希检查。
编辑:填充fileContent
fs.readFile('test.txt.enc', readContent);
function readContent (err, data) {
err ? Function("error","throw error")(err) : fileContent = data.toString();
};