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

时间:2018-01-18 03:19:03

标签: encryption openssl cryptography aes

代码使用openssl库加密/解密函数,如下面的......

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

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

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

char key[]="012345678901234567890";

1 个答案:

答案 0 :(得分:1)

  

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

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

如果提供的是一个尺寸不足的密钥,则会在密钥字节的尾部读取随机字节/垃圾。该函数正在读取字节,但您不知道它们是什么。您可以在本地计算机上运气并且能够加密和解密。它几乎肯定无法在另一台机器上解密。

Valgrind应该提醒你阅读uninaitalezed [key]内存的问题。阿桑应警惕保护区内的阅读。

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