NodeJS の「crypto」ライブラリを使用していくつかのメッセージを暗号化しようとしていますが、次のエラーが発生します。
(ノード:31732) UnhandledPromiseRejectionWarning: エラー: エラー:0607F08A:デジタル エンベロープ ルーチン:EVP_EncryptFinal_ex:データがブロック長の倍数ではありません
Cipheriv.final (internal/crypto/cipher.js:164:28)
で 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 などのアルゴリズムを使用できません (メッセージは暗号化された順序で受信されません)。
どんな助けでも大歓迎です!