Como descriptografar AES usando o OpenSSL

Eu gostaria de usar a biblioteca OpenSSL para descriptografar alguns dados do AES. O código tem acesso à chave. Este projeto já usa libopenssl para outra coisa, então eu gostaria de me ater a esta biblioteca.

Eu fui olhar diretamente para/usr/include/openssl/aes.h já que o site OpenSSL é leve na documentação. A única função de decodificação é esta:

void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key);

Infelizmente, isso não tem como especificar a duração doin ponteiro, então não tenho certeza de como isso funcionaria.

Existem várias outras funções que, acredito, levam um parâmetro numérico para diferenciar entre criptografia e descriptografia. Por exemplo:

void AES_ecb_encrypt(*in, *out, *key, enc);
void AES_cbc_encrypt(*in, *out, length, *key, *ivec, enc);
void AES_cfb128_encrypt(*in, *out, length, *key, *ivec, *num, enc);
void AES_cfb1_encrypt(*in, *out, length, *key, *ivec, *num, enc);
void AES_cfb8_encrypt(*in, *out, length, *key, *ivec, *num, enc);
void AES_cfbr_encrypt_block(*in, *out, nbits, *key, *ivec, enc);
void AES_ofb128_encrypt(*in, *out, length, *key, *ivec, *num);
void AES_ctr128_encrypt(*in, *out, length, *key, ivec[], ecount_buf[], *num);
void AES_ige_encrypt(*in, *out, length, *key, *ivec, enc);
void AES_bi_ige_encrypt(*in, *out, length, *key, *key2, *ivec, enc);

Pelo que entendi usando o Google, oenc parm é definido comoAES_ENCRYPT ouAES_DECRYPT para especificar qual ação deve ser realizada.

O que me leva às minhas 2 perguntas:

O que esses nomes significam? O que é ecb, cbc, cfb128, etc ..., e como decido qual devo usar?O que éunsigned char *ivec parm necessário para a maioria deles, e de onde o faço?

questionAnswers(1)

yourAnswerToTheQuestion