我可以使用 Libsodium 进行 AES-128-ECB 加密吗?

Can I do AES-128-ECB encryption with Libsodium?

我需要使用 AES-128-ECB 加密数据块,并希望使用 libsodium 和 Ruby 来加密。我在 Ruby 中使用 OpenSSL API 制作了一个解决方案原型,如下所示:

aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.encrypt
aes.key = key
aes.update(data) + aes.final 

这可行,但我需要 libsodium 的其他功能,所以我想改用它并摆脱对 OpenSSL 的依赖。不幸的是,我没有看到任何适用于 ECB 模式的 API。我也在使用 ruby 包装器 RbNaCl,但我什至没有看到使用基本 libsodium API 执行此操作的任何方法。我确实看到了 AES-128-CTR.

是否可以使用 libsodium 加密 AES-128-ECB?

libsodium 有意不支持 ECB 模式。

在这种模式下,同一个块加密两次产生相同的密文两次。

从安全角度来看为什么这很糟糕的经典例证是 the ECB penguin

libsodium 提供了一组经过精心挑选的安全结构,而不是提供许多可供选择的原语、模式和参数,许多组合实际上是不安全的。

AES-ECB 不是其中之一,并且永远不会因为上述原因。

你真的应该改用不同的结构。