Node.js Crypto AES-128加密填充流

时间:2018-12-13 03:26:37

标签: node.js encryption stream cryptography

我已成功使用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()。没有它,加密将始终导致文件具有错误的哈希。我尝试过:

  1. 创建一个Transform,它将附加剩余的填充。这是行不通的,因为您无法在尚未调用final的密码上调用update
  2. 使用setAutoPadding设置自动填充。在所有情况下都会导致错误Error: error:0607F08A:digital envelope routines:EVP_EncryptFinal_ex:data not multiple of block length

如何使用与最初加密相同的方式对流进行加密?

0 个答案:

没有答案