OpenSSl AES 解密的正确打开方式

本文详细介绍了如何使用OpenSSL库中的EVP_DecryptUpdate函数进行AES-128-ECB模式的解密操作。在解密过程中,由于可能需要多次调用EVP_DecryptUpdate以完成整个解密过程,作者通过实例代码展示了如何处理这一情况,避免了理解误区。
摘要由CSDN通过智能技术生成

EVP_DecryptUpdate 是有可能需要重复调用的。网上都没有这块内容。绕了点弯路

bool bRet = true;
std::string plaintext = ciphertext;
plaintext.resize(ciphertext.length());
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
if (!ctx)
{
	return false;
}
if (!EVP_DecryptInit_ex(ctx, 
	EVP_aes_128_ecb(), nullptr, 
	(const unsigned char*)key.data(), nullptr))
{
	return false;
}

int totalOut = 0;
int totalIn = 0;
while (totalIn < ciphertext.length())
{
	int out = 0;
	if (!EVP_DecryptUpdate(ctx, 
		(unsigned char*)(plaintext.data() + totalOut), &out, 
		(unsigned char*)(ciphertext.data() + totalIn), AES128_BLOB_SIZE))
	{
		return false;
	}
	totalOut += out;
	totalIn += AES128_BLOB_SIZE;
}

if (!EVP_DecryptFinal_ex(ctx, (unsigned char*)(plaintext.data() + totalOut), &out))
{
	return false;
}
totalOut += out;
plaintext.resize(totalOut);
std::cout << totalOut << " " << plaintext << endl;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值