Как выполнить дешифрование AES с использованием OpenSSL

Я хотел бы использовать библиотеку OpenSSL для расшифровки некоторых данных AES. Код имеет доступ к ключу. Этот проект уже использует libopenssl для чего-то еще, поэтому я хотел бы придерживаться этой библиотеки.

Я посмотрел прямо в / usr / include / openssl / aes. h , поскольку на сайте OpenSSL нет документации. Единственная функция дешифрования - это:

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

К сожалению, здесь нет способа указать длину указателя в , поэтому я не уверен, как это будет работать.

Там есть несколько других функций, которые, как я полагаю, используют числовой параметр, чтобы различать шифрование и дешифрование. Например:

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 , чтобы указать, какое действие необходимо выполнить. 12123] Это подводит меня к двум моим вопросам:

  1. Что означают эти имена? Что такое ecb, cbc, cfb128 и т. Д. И как мне решить, какой из них мне следует использовать?
  2. Какой параметр unsigned char * ivec необходим для большинства из них, и где мне его взять?
15
задан jww 15 May 2015 в 20:14
поделиться