我正在使用来自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的标准填充是什么?还有其他任何预加密步骤吗?我找不到任何有关的信息..
任何人都可以帮我..在此先谢谢..
我找到了解决方案,问题出在我如何进行填充,起初我没有进行填充。然后我使用了PKCS5,但是将填充值连接到Input上是错误的。
这就是我现在做填充的方式。而且有效。
for(k= 0;k<PadLen;k++)
sprintf((char*)(intext + InputLen +k),"%C",padValue);
paddValue是无符号字符类型。
感谢您的帮助。