3DES EDE ECB加密-c ++输出与JAVA默认模式输出不同

问题描述 投票:-1回答:1

我正在使用来自openssl库的3des-ede-ebc加密。结果密码使用base64进行编码。但是,加密的结果密码(base564和Hex编码)与任何在线加密站点的结果都不同。

例如:代表1234我的程序输出:

Hex:722DDADAB2AFF81A

Base64:ci3a2rKv + Bo =

通过在线加密工具

十六进制:0685EBBC2E239F72

Base64:BoXrvC4jn3I =

    //keys

des_cblock key1 = {0x73,0x64,0x73,0x64,0x33,0x34,0x35,0x34};

des_cblock key3 = {0x35,0x73,0x64,0x66,0x61,0x73,0x64,0x32};

des_cblock key2 = {0x33,0x32,0x73,0x64,0x73,0x33,0x33,0x34};

//Encryption

for(int incr = 0; incr < siL_Len; incr += 8)

{
 DES_ecb3_encrypt((C_Block *)(in + incr), (C_Block *)(out + incr), &ks1, &ks2, &ks3, DES_ENCRYPT);
}

我能够将程序结果中的密码解密为原始值(两者都是不同的程序。)并且base64编码正确且经过验证。

在加密期间/之前,我丢失了一些东西。可能在加密之前进行了一些编码/填充。

3des ebc的标准填充是什么?还有其他任何预加密步骤吗?我找不到任何有关的信息..

任何人都可以帮我..在此先谢谢..

c++ encryption 3des tripledes ecb
1个回答
0
投票

我找到了解决方案,问题出在我如何进行填充,起初我没有进行填充。然后我使用了PKCS5,但是将填充值连接到Input上是错误的。

这就是我现在做填充的方式。而且有效。

for(k= 0;k<PadLen;k++) sprintf((char*)(intext + InputLen +k),"%C",padValue);

paddValue是无符号字符类型。

感谢您的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.