現在、openssl を使用して特定のテキストを復号化しようとしています。そこにある例を使用して独自のコードを作成しようとしました: OpenSSL GCM復号化での認証が遅れ ましたが、最終的にはまだ悪い結果が得られます。私の復号化関数は次のとおりです。
void aes_decrypt(EVP_CIPHER_CTX ctx, unsigned char *pCipherText,
int pCipherTextLen, int AADLen, unsigned char* pKey, unsigned char* pIv,
unsigned char* pMac, int MacLen) {
int bytesProcessed = 12;
int dec_success;
}
unsigned char * pOut = malloc(pCipherTextLen);
unsigned char * pAAD = malloc(AADLen);
unsigned char * pClearText = malloc(pCipherTextLen);
// setting cipher, key and iv
EVP_DecryptInit(&ctx, EVP_aes_256_gcm(), pKey, pIv);
// setting tag
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, 24, NULL);
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_TAG, 16, pMac);
// adding Additional Authenticated Data (AAD)
EVP_DecryptUpdate(&ctx, NULL, &bytesProcessed, pAAD, AADLen);
// decrypting data
EVP_DecryptUpdate(&ctx, pClearText, &bytesProcessed, pCipherText,
pCipherTextLen);
// authentication step
dec_success = EVP_DecryptFinal(&ctx, pOut, &bytesProcessed);
free(pOut);
free(pMac);
free(pAAD);
free(pClearText);
}
AAD を除くすべてのデータは、以前にテキストファイルを読み取ることによって提供されます (暗号化されたデータ、使用されたキー/Ivs、MAC、および復号化後に予想される結果のリストがあります) いくつかの実験の後、次の問題が発生します: - 結果は次のとおりです。予想とは異なります - MAC を変更しても結果には影響しません (平文) - AAD を抑制しても結果には影響しません。
なぜうまくいかないのか、本当にわかりません。何かアイデアやコツ、具体例があれば大変助かります
よろしくお願いします