Comment faire de l'AES de déchiffrement à l'aide d'OpenSSL

Je voudrais utiliser la bibliothèque OpenSSL pour décrypter certaines données AES. Le code a accès à la clé. Ce projet utilise déjà libopenssl pour autre chose, donc j'aimerais m'en tenir à cette bibliothèque.

Je suis allé à la recherche directement dans /usr/include/openssl/aes.h depuis la OpenSSL site est la lumière sur la documentation. La seule décrypter la fonction est celle-ci:

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

Malheureusement, ce n'est pas un moyen pour spécifier la longueur de la in pointeur, donc je ne sais pas comment cela pourrait fonctionner.

Il y a plusieurs autres fonctions qui, je crois, prendre un numérique parm à différencier entre le chiffrement et le déchiffrement. Par exemple:

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);

De ce que je comprends à l'aide de Google, le enc parm obtient mis à AES_ENCRYPT ou AES_DECRYPT de spécifier l'action à prendre.

Qui m'amène à mes 2 questions:

  1. Que faire de ces noms signifient? Qu'est-ce que ecb, cbc, cfb128, etc..., et comment puis-je décider lequel je devrais utiliser?
  2. Quel est le unsigned char *ivec parm nécessaires pour la plupart de ceux-ci, et où puis-je l'obtenir à partir d'?
Vous devez vous pas utiliser AES_encrypt et amis. Vous devriez être en utilisant EVP_* fonctions. Voir EVP Symétrique de Chiffrement et de Déchiffrement sur la OpenSSL wiki. En fait, vous devriez probablement être authentifié à l'aide de chiffrement, car il fournit des confidentialité et l'authenticité. Voir EVP Authentifié de Chiffrement et de Déchiffrement sur la OpenSSL wiki.

OriginalL'auteur Stéphane | 2011-02-27