Я хотел бы использовать библиотеку OpenSSL для дешифрования некоторых данных AES. Код имеет доступ к ключу. Этот проект уже использует libopenssl для чего-то другого, поэтому я хотел бы придерживаться этой библиотеки.
Я посмотрел прямо в /usr/include/openssl/aes.h
, так как сайт OpenSSL освещен в документации. Единственная функция дешифрования - это:
void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key);
К сожалению, у этого нет способа указать длину указателя in
, поэтому я не уверен, как это будет работать.
Есть несколько других функций, которые, как я полагаю, берут числовое расположение, чтобы различать шифрование и дешифрование. Например:
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);
Из того, что я понимаю с помощью Google, parm enc
устанавливается в AES_ENCRYPT
или AES_DECRYPT
, чтобы указать, какое действие должно выполняться.
Что приводит меня к моим двум вопросам:
- Что означают эти имена? Что такое ecb, cbc, cfb128 и т.д., И как я могу решить, какой из них я должен использовать?
- Что такое
unsigned char *ivec
parm, необходимый для большинства из них, и откуда его получить?