gpt4 book ai didi

node.js - 尝试使用 AES-128-ECB 算法加密时出错

转载 作者:行者123 更新时间:2023-12-05 04:01:52 32 4
gpt4 key购买 nike

我一直在尝试使用 NodeJS 中的“crypto”库加密一些消息,但出现以下错误:

(node:31732) UnhandledPromiseRejectionWarning: Error: error:0607F08A:digital envelope routines:EVP_EncryptFinal_ex:data not multiple of block length

at Cipheriv.final (internal/crypto/cipher.js:164:28)
at self.test (...)

self.test = async function(info, object) {
let message = {
info: info,
object: object
};

let iv = crypto.randomBytes(16)
let key = Buffer.from(config.key, 'utf8');
let cipher = crypto.createCipheriv("aes-128-ecb", key, '');
cipher.setAutoPadding(false)
let encrypted = cipher.update(JSON.stringify(message));
encrypted = Buffer.concat([iv, encrypted, cipher.final()]);
encrypted = encrypted.toString('base64');

console.log(encrypted);
}

错误源自 cipher.final() 调用,如上面的堆栈所示。

我不知道这个错误是什么意思以及如何解决它。不幸的是,由于限制(我正在尝试通过 UDP 发送加密数据),我无法使用 CBC 等算法(消息的接收顺序与加密顺序不同)。

非常感谢任何帮助!

最佳答案

cipher.setAutoPadding(false) 将填充设置为 false,并且 ECB 和 CBC 仅在完整 block 上运行 - 这就是为什么对于不是 block 大小倍数的任何内容都需要填充的原因.您应该删除该行(首选)或创建您自己的填充(并落入发明您自己的加密货币的陷阱)。

请注意,ECB 和 CBC 本质上都容易受到明文/填充 oracle 攻击。无论如何,欧洲央行都是不安全的,它不使用 IV。对于传输模式安全,您需要一个 MAC 或者您应该使用经过身份验证的密码。传输安全很难做到,试试 DTLS。

关于node.js - 尝试使用 AES-128-ECB 算法加密时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908755/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com