Let's say the ECB. It encrypts 64 bits at a time
AES is a 128-bit block cipher. It encrypts / decrypts 128-bit at a time. This is the standard. The AES_encrypt / AES_decrypt block expects 128 bits or 16 bytes of input and output data lengths.
But with the above code, it does not work well. When I change from + = 8; in c + = 16; this is normal. What is a good way to do this? I mean that we all know that 8x8 = 64 bits, so this should be correct, but it is not, encryption / decryption only works when I have c + = 16;
That's why it works great on
c + = 16
In addition, there are several problems in your code.
unsigned char enc_out[encslength];
Please save the dec_out size from encslength, since you are decrypting the encslength bytes, not the lengthlength in your code.
unsigned char dec_out[encslength]; memset(enc_out, 0, sizeof(enc_out)); memset(dec_out, 0, sizeof(dec_out)); AES_KEY enc_key, dec_key; AES_set_encrypt_key(aes_key, keylength, &enc_key);
In this section, increase c by 16 as AES by 128 block ciphers.
long c = 0; while(c < encslength) { AES_ecb_encrypt(paddedinput+c, enc_out+c, &enc_key, AES_ENCRYPT); c += 16; }
A similar change here:
c = 0; AES_set_decrypt_key(aes_key, keylength, &dec_key); while(c < encslength) { AES_ecb_encrypt(enc_out+c, dec_out+c, &dec_key, AES_DECRYPT); c += 16; }
About other modes:
- CFB mode No need to fill in data. Use AES_cfb128_encrypt and the initialization vector (IV) along with the key.
For encryption:
AES_cfb128_encrypt (paddedinput, enc_out, inputlength, &enc_key, iv, AES_ENCRYPT);
To decrypt:
AES_cfb128_decrypt (enc_out, dec_out, inputlength, &enc_key, iv, AES_ENCRYPT);
- OFB mode Similarly, in OFB mode there is no need to enter data. Use AES_ofb128_encrypt and IV along with the key.
For encryption:
To decrypt:
num = 0; AES_ofb128_encrypt (enc_out, dec_out, inputlength, &enc_key, iv, &num);
You may need to modify the code a bit to suit your needs.
Learn more about block encryption mode .