代码使用openssl库加密/解密函数,如下面的......
EVP_EncryptInit_ex( ctx, EVP_aes_256_cbc(), NULL, key, iv)
当密钥长度不等于256位(32字节)时,它可以工作。 密钥长度可以是任意长度。为什么呢?
例如,它工作正常,没有收到错误:
char key[]="012345678901234567890";
答案 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),其中提取熵然后展开它。