我目前正在尝试使用 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 之外的所有数据都是以前通过读取文本文件给出的(我有一个加密数据列表、使用的密钥/Iv、MAC 和解密后预期的结果)经过几次实验,出现以下问题: - 结果是与预期不同 - 修改 MAC 不会影响结果(明文) - 抑制 AAD 不会影响结果。
我真的不知道为什么它不起作用。如果您有任何想法、提示或具体示例,这将是一个很大的帮助
此致