【问题标题】:OpenSSL pads keys in aes encryption?OpenSSL在aes加密中填充密钥?
【发布时间】:2022-01-01 01:20:20
【问题描述】:

我正在尝试将 aes-128-cbc 加密与 openssl 一起使用,并且我希望密钥需要为 32 位。但是,我注意到当我输入 18 的密钥长度时,openssl 不会给我一个错误。

echo hello | openssl enc -aes-128-cbc -A -a -nosalt -K 123456789012345678 -iv 66666666666666666666666666666666

output:zBN+65infn74QK+prfY6kw==

但如果我在键后添加 0 直到 32 位,我仍然会得到相同的结果。

echo hello | openssl enc -aes-128-cbc -A -a -nosalt -K 12345678901234567800000000000000 -iv 6666666666666666666666666666666

output:zBN+65infn74QK+prfY6kw==

是否有说明 OpenSSL 向密钥添加填充的文档?

编辑:我需要在代码中重现此行为。我得到了密钥,但无法保证密钥的位数。

【问题讨论】:

标签: openssl aes


【解决方案1】:

具有 128 位密钥的 AES 是 16 字节或 32 位十六进制数字密钥。可能是零填充键的未指定部分,不要依赖键填充,这是未指定的行为。

最好为加密函数提供精确大小的输入,为 AES 128 位密钥指定 32 个十六进制数字。

【讨论】:

    【解决方案2】:

    现在,如果您的密钥或 IV 太短,OpenSSL 将打印一条警告说 hex string is too short, padding with zero bytes to length

    但是,它没有提到如何(前置或附加)。

    幸运的是,您可以使用 -p 查看 OpenSSL 正在使用的确切密钥和 IV。

    显然,它在右边附加了零。

    >openssl enc -aes-128-cbc -d -K 614c9b1fa9ea1b1be878929c592d -iv 0276 -nosalt -in enc -out dec -p
    hex string is too short, padding with zero bytes to length
    hex string is too short, padding with zero bytes to length
    key=614C9B1FA9EA1B1BE878929C592D0000
    iv =02760000000000000000000000000000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2021-02-02
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多