Șirul este criptat cu următoarele proprietăți (folosind C#):
myAes.Mode = CipherMode.CBC
myAes.KeySize = 128
myAes.Padding = PaddingMode.PKCS7
myAes.BlockSize = 128
myAes.FeedbackSize = 128
Cheie: 5753B8AA97BE5B5D9584864DF3134E64
Aceasta este funcția mea de decriptare:
int AESdecrypt(unsigned char *ciphertext, size_t ciphertext_len, unsigned char *key, unsigned char *iv, unsigned char *plaintext)
{
EVP_CIPHER_CTX *ctx;
int len;
int reErori=1;
int plaintext_len;
/* Creați și inițializați contextul */
dacă(!(ctx = EVP_CIPHER_CTX_new()))
{
LOGF_TRACE("\t Eroare în EVP_CIPHER_CTX_new");
EVP_CIPHER_CTX_free(ctx);
întoarce 0;
}
/*
* Inițializați operația de decriptare. IMPORTANT - asigurați-vă că utilizați o cheie
* și dimensiunea IV adecvată pentru cifra dvs
* În acest exemplu, folosim AES de 256 de biți (adică o cheie de 256 de biți). The
* Mărimea IV pentru *majoritatea* modurilor este aceeași cu dimensiunea blocului. Pentru AES asta
* este de 128 de biți
*/
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, cheie, iv))
{
LOGF_TRACE("\t Eroare în EVP_DecryptInit_ex");
EVP_CIPHER_CTX_free(ctx);
întoarce 0;
}
/*
* Furnizați mesajul de decriptat și obțineți rezultatul text simplu.
* EVP_DecryptUpdate poate fi apelat de mai multe ori dacă este necesar.
*/
if(1 != EVP_DecryptUpdate(ctx, text simplu, &len, text cifrat, text_cifrat_len))
{
LOGF_TRACE("\t EVP_DecryptUpdate");
EVP_CIPHER_CTX_free(ctx);
întoarce 0;
}
plaintext_len = len;
/*
* Finalizați decriptarea. Alți octeți de text simplu pot fi scrieți la
* această etapă.
*/
if(1 != EVP_DecryptFinal_ex(ctx, text simplu + len, &len))
{
LOGF_TRACE("\t EVP_DecryptFinal_ex");
EVP_CIPHER_CTX_free(ctx);
întoarce 0;
}
text_len += len;
/* Curăță */
EVP_CIPHER_CTX_free(ctx);
return text_len;
}
Cu toate acestea, când încerc să decriptez șirul rezultat are 16 (0x10) octeți suplimentari: (S-au eliminat unele caractere din motive de securitate).
0000 - 2e 3c 81 6b ed 2e 6b 59-fe 38 ae b7 56 11 1f c2 .<.k..kY.8..V...
0010 - 45 53 54 41 20 45 53 20-55 4e 41 20 50 52 55 45 ESTA ES UNA PRUE
0020 - 42 41 20 44 45 20 43 49-46 52 41 44 4f 20 41 45 BA DE CIFRADO AE
0030 - 53 20 50 41 52 41 20 45-54 48 45 52 4e 45 54 20 S PARA ETHERNET
0040 - XX XX XX XX XX XX XX XX-XX XX XX XXXXXXXX
Aș dori să știu dacă acest lucru este normal și ar trebui să șterg primii 16 octeți sau cum să evit să am acești octeți suplimentari (nu mi se pare normal).
Ar putea avea vreo legătură cu IV-ul pe care îl folosesc pentru criptare?
Mulțumiri.