Я бы хотел использовать библиотеку 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 парм enc
имеет значение AES_ENCRYPT
или AES_DECRYPT
, чтобы указать, какое действие необходимо выполнить.
Какойприводит меня к моим 2 вопросам:
- Что означают эти имена?Что такое ecb, cbc, cfb128 и т. Д. И как я могу решить, какой из них мне следует использовать?
- Что такое
unsigned char *ivec
parm, необходимый для большинства из них, и где я могу его получитьс?