OpenSSL 加密 AES 128 位 CBC

OpenSSL Encryption AES 128bit CBC

当我运行这个程序时,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");
}   
}

没关系,似乎是因为某些奇怪的原因 AES_cbc_encrypt 函数修改了 IV。

for(int j = 0; j < 10; j++) {

    AES_KEY aeskeyEnc;
    unsigned char iv[]  = "\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00\xA2\xB2\xC2\xD2\xE2\xF2";
    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");
}