EVP形式实现的3DES方法加密结果不正确
EVP方式实现的3DES方法加密结果不正确
封装了openssl中的3des算法,计算出的结果不正确
EVP_des_ede_cbc\EVP_des_ede3_ecb\EVP_des_cbc三个参数都测试了,都不正确
测数数据:
密钥 11111111111111111111111111111111
数据 11111111111111111111111111111111
结果 F40379AB9E0EC533F40379AB9E0EC533B95374BA8DDFF8C2
正确结果 F40379AB9E0EC533F40379AB9E0EC533
为什么最后多一个分组呢?
------解决方案--------------------
填充了?~~
封装了openssl中的3des算法,计算出的结果不正确
EVP_des_ede_cbc\EVP_des_ede3_ecb\EVP_des_cbc三个参数都测试了,都不正确
测数数据:
密钥 11111111111111111111111111111111
数据 11111111111111111111111111111111
结果 F40379AB9E0EC533F40379AB9E0EC533B95374BA8DDFF8C2
正确结果 F40379AB9E0EC533F40379AB9E0EC533
为什么最后多一个分组呢?
//3DES
int ThreeTrip_DES(unsigned char* data,int datalen,unsigned char* key,int keylen,
unsigned char* outdata,int* outdatalen)
{
unsigned char outbuf[1024];
int outlen, tmplen;
unsigned char iv[8] = {0,0,0,0,0,0,0,0}; //8字节一个分组的长度
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx,EVP_des_ede_cbc(),NULL,key,iv);//3DES算法 EVP_des_ede_cbc\EVP_des_ede3_ecb\EVP_des_cbc
if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, (unsigned char*)data, datalen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -1;
}
//注意,传入给下面函数的输出缓存参数必须注意不能覆盖了原来的加密输出的数据
if(!EVP_EncryptFinal_ex(&ctx, outbuf + outlen, &tmplen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -2;
}
outlen += tmplen;
EVP_CIPHER_CTX_cleanup(&ctx);
//返回数据
*outdatalen = outlen;
memcpy(outdata,outbuf,outlen);
return 0;
}
------解决方案--------------------
填充了?~~