Я работаю над кодом (криптография), реализующим режим aes-cb c в c.
Я не знаю, почему printf("enc : %s\n",enc);
эта часть ничего не показывает. (в последней части кода.
Я думаю, что есть проблема с массивом ... но я не могу найти, где ошибка.
Может кто-нибудь помочь мне, где проблемы?
Если с моим форматом вопроса возникнет проблема, я ее исправлю. Спасибо
Это весь мой код.
#include <stdio.h>
#include <openssl/bn.h>
#include <openssl/aes.h>
#include <string.h>
#define mSize 4
void block_xor(unsigned char z[16], const unsigned char x[16], const unsigned char y[16])
{
for(int i=0; i<16; i++){
z[i] = x[i] ^ y[i];
}
}
void AES_cbc_encrypt_new(const unsigned char*in, unsigned char *out, size_t length, AES_KEY *key, unsigned char *ivec, int flag)
{
if(flag == AES_ENCRYPT) {
memcpy(&out[0], ivec, 16);
unsigned char temp[16];
for(int i=0; i<length; i++){
block_xor(temp,&out[16*i],&in[16*i]);
AES_encrypt(temp,&out[16*(i+1)], key);
}
}
else { //decrypt
unsigned char temp[16];
for(int i=0; i<length; i++){
AES_decrypt(&in[16*(i+1)],temp ,key);
block_xor(&out[16*i],temp, &in[16*i]);
}
}
}
int main(int argc, char* argv[]) {
BIGNUM *key= BN_new();
unsigned char userkey[32];
int size=128;
AES_KEY enckey,deckey;
BN_rand(key, size, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
BN_bn2bin(key,userkey);
AES_set_encrypt_key(userkey,size, &enckey);
AES_set_decrypt_key(userkey,size, &deckey);
unsigned char m[16*mSize] = "This class introduces the cryptographic systems";
unsigned char enc[16*(mSize+1)] ={0};
unsigned char dec[16*mSize] ={0};
unsigned char ivec[16] = {0};
AES_cbc_encrypt_new(m, enc, mSize, &enckey, ivec, AES_ENCRYPT);
printf("enc : %s\n",enc);
printf("enc : %s\n",&enc[16]);
AES_cbc_encrypt_new(enc, dec, mSize, &deckey, ivec, AES_DECRYPT);
printf("dec : %s\n",dec);
return 0;
}