I write a simple AES encryption/decryption program, not recommend using it, but show some basic concepts:
(1) Refer my previous post: initialise EVP_CIPHER_CTX
only once, which can improve code efficiency:
......
EVP_CIPHER_CTX *enc_ctx = EVP_CIPHER_CTX_new();
if (EVP_EncryptInit_ex(enc_ctx, EVP_aes_128_ecb(), NULL, key, NULL) == 0) {
goto END;
}
......
(2) Because the key length is 128
bits, the cipher text length should be multiples of 16
bytes. The plain text length is 98
; EVP_EncryptUpdate()
will encrypt first 96
bytes, and EVP_EncryptFinal_ex()
will encrypt the remaining 2
bytes. The total length of encrypted text is 112
.
......
if (EVP_EncryptUpdate(enc_ctx, ct, &ct_len, pt, sizeof(pt)) == 0) {
goto END;
}
if (EVP_EncryptFinal_ex(enc_ctx, ct + ct_len, &len) == 0) {
goto END;
}
ct_len += len;
......
Correspondingly, EVP_DecryptUpdate()
will decrypt first 96
bytes, and EVP_DecryptFinal_ex()
will decrypt the trailing 2
bytes:
......
if (EVP_DecryptUpdate(dec_ctx, decrypted, &decrypted_len, ct, ct_len) == 0) {
goto END;
}
if (EVP_DecryptFinal_ex(dec_ctx, decrypted + decrypted_len, &len) == 0) {
goto END;
}
decrypted_len += len;
......