我已成功使用NodeJS通过以下方式加密文件:
let cipher = crypto.createCipheriv('aes-128-cbc', key, iv),
crypted = cipher.update(file_data, 'binary');
return Buffer.concat([crypted, cipher.final()]);
这将生成一个具有与我们的目标加密完全匹配的哈希的文件,这是服务器端OpenSSL命令:
openssl aes-128-cbc -e -in file -out file.enc -nosalt -iv <iv_str> -K <k_str>
目标是升级我们的系统以使用nodejs流。节点文档和其他文章提出了以下加密流的方法:
cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let file_stream = fs.createReadStream(local_file, 'binary'),
write_stream = fs.createWriteStream(`${local_file}.enc`, 'binary');
file_stream.pipe(cipher).pipe(write_stream);
但是,这会忽略附加的cipher.final()
。没有它,加密将始终导致文件具有错误的哈希。我尝试过:
Transform
,它将附加剩余的填充。这是行不通的,因为您无法在尚未调用final
的密码上调用update
setAutoPadding
设置自动填充。在所有情况下都会导致错误Error: error:0607F08A:digital envelope routines:EVP_EncryptFinal_ex:data not multiple of block length
如何使用与最初加密相同的方式对流进行加密?