Я думаю, что у меня есть проблемы с моим массивом. Printf ничего не показывает - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю над кодом (криптография), реализующим режим 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...