有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?

She*_*aan 0 encryption cryptography initialization-vector cbc-mode

我正在尝试openssl使用aes-128-cbc加密来加密文本文件,我想知道是否有一种方法可以仅使用密钥而不是 iv 对其进行加密?

每次我尝试运行时:

openssl enc -aes-128-cbc -e -in dummy_file.txt -out dummy.aes-128-cbc.bin -K 00112233445566778889aabbccddeeff
Run Code Online (Sandbox Code Playgroud)

我收到错误消息iv undefined,它生成的加密文件为空,甚至不是二进制文件。

Maa*_*wes 6

不,这是不可能的,CBC需要IV。但是,您可以将 IV 设置为全零。由于 IV 在加密之前与第一个明文块进行异或运算,这归结为根本没有 IV:您将直接使用块密码加密第一个明文块。

请注意,使用相同的密钥和 IV 创建多个密文不会产生安全密码。对于 CBC,需要有一个随机(或至少是不可预测的)IV。否则攻击者至少可以看到哪个明文以相同的数据块开始。

的IV总是由用于AES,这对于涉及到32个十六进制零,当然16个字节-iv的命令行参数openssl

  • AES 的密钥可以是 16、24 或 32 个随机字节——仅此而已。但是,您可以使用密码哈希(带盐和迭代计数)来生成 AES 密钥。这实际上是没有 `-K` 选项的 `openssl` 的标准行为,尽管它只使用 8 字节的盐,更糟糕的是,迭代计数设置为 1 的弱密码散列方案。只要你的密码是 *very,就可以了,非常强壮*。它会为您的文件添加魔法和盐的前缀,并且 - 特别是为您 - 它将从盐和密码生成一个密钥 ** 和 ** 随机 IV。 (2认同)
  • 对于学校项目,密钥可能由密钥的 ASCII 编码后跟零值字节组成,最多 16 个字节。无论哪种方式,老师都应该得到很好的回答。 (2认同)