【发布时间】:2020-04-15 02:24:52
【问题描述】:
当我运行这个程序时,AES_cbc_encrypt 在每个循环中都会产生不同的密码。有没有办法重置状态,以便在每个循环期间产生相同的密码?
void main()
{
int i;
unsigned char iv[] = "\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00\xA2\xB2\xC2\xD2\xE2\xF2";
unsigned char plaintxt[] = "\x25\x50\x44\x46\x2d\x31\x2e\x35\x0a\x25\xd0\xd4\xc5\xd8\x0a\x34";
unsigned char ciphertext[] = "\xd0\x6b\xf9\xd0\xda\xb8\xe8\xef\x88\x06\x60\xd2\xaf\x65\xaa\x82";
unsigned char cipher[128];
char key[] = "\x95\xfa\x20\x30\xe7\x3e\xd3\xf8\xda\x76\x1b\x4e\xb8\x05\xdf\xd7";
for(int j = 0; j < 10; j++) {
AES_KEY aeskeyEnc;
AES_set_encrypt_key(key, 128, &aeskeyEnc);
AES_cbc_encrypt(plaintxt, cipher, 33, &aeskeyEnc, iv, AES_ENCRYPT);
for (i = 0; i < KEYSIZE; i++) {
printf("%.2x", (unsigned char)cipher[i]);
}
printf("\n");
}
}
【问题讨论】:
-
这是密码块链接的一项功能,对安全性很重要。电子密码本每次都会产生相同的结果,但你必须有一个非常非常好的理由,因为它大大削弱了加密。你想完成什么?
-
@SteveFriedl IV 是固定的。 OpenSSL 保持状态。
-
我猜,有缓冲区溢出?
-
@SteveFriedl 我的明文正好是一个块(128bit)长,所以即使是CBC也应该产生相同的密文吧?
-
您是否检查了默认填充?在这种情况下你应该说没有填充。
标签: c encryption openssl aes