4

現在、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 を抑制しても結果には影響しません。

なぜうまくいかないのか、本当にわかりません。何かアイデアやコツ、具体例があれば大変助かります

よろしくお願いします

4

1 に答える 1

1

問題は解決された。プログラムによって提供された AAD が間違っていた

于 2013-01-14T09:28:52.417 に答える