【问题标题】:Why does EVP_CIPHER is EVP_aes_256_cbc() succeed when key length is not equal 256bits?当密钥长度不等于 256 位时,为什么 EVP_CIPHER 是 EVP_aes_256_cbc() 成功?
【发布时间】:2018-01-18 03:19:02
【问题描述】:

openssl库的代码加解密函数,如下...

EVP_EncryptInit_ex( ctx, EVP_aes_256_cbc(), NULL, key, iv)

当密钥长度不等于 256 位(32 字节)时,它可以工作。 密钥长度可以是任意的。为什么?

例如,它工作正常,没有收到错误:

char key[]="012345678901234567890";

【问题讨论】:

  • 请围绕您的问题添加更多上下文,以便我们更有效地回答。
  • 为什么要问为什么?为什么不以正确的方式去做呢?
  • TL;DR C 语言不执行边界检查(而是使用这种可爱的指针算法),因此该函数的实现只读取从 key 指针位置开始的 32 个字节...不管有什么。或者它在你做你不应该做的事情时崩溃。

标签: encryption openssl cryptography aes


【解决方案1】:

当密钥长度不等于256bits时,为什么EVP_CIPHER is EVP_aes_256_cbc()会成功?

您似乎在问为什么在密钥较小(例如 128 位)时可以使用 EVP_aes_256_cbc 进行加密。

如果您提供的密钥尺寸过小,则您正在读取密钥字节尾部的随机字节/垃圾。该函数正在读取字节,但您不知道它们是什么。您可能在本地机器上很幸运,并且能够加密和解密。在不同的机器上解密几乎肯定会失败。

Valgrind 应该提醒您读取未完成的 [key] 内存的问题。 Asan 应该在警戒区读取数据时发出警报。

我不相信EVP_aes_256_cbc 填充或扩展。就像@Zaph 所说,始终使用正确的尺寸。如果您需要将较小的键“拉伸”成较大的键,请参阅HMAC-based Extract-and-Expand Key Derivation Function (HKDF),它会提取熵然后扩展它。

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 2013-08-23
    • 2011-10-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2013-10-31
    • 2013-06-16
    • 1970-01-01
    相关资源
    最近更新 更多