原文地址: http://my.oschina.net/mawx/blog/85424
最近在看一个项目的代码
开发语言:C++
开发环境:VS2005
但有一个很别扭的地方,就是这个项目与外界的加密算法采用DESede,但其实现是采用jni调用java vm里面的函数。
查了一下,可以用Openssl来实现,但要注意model(ECB)和padding(PKCS#5)
#资料
PKCS5, PKCS7和SSL3, 以及CMS(Cryptographic Message Syntax)
有如下相同的特点:
1)填充的字节都是一个相同的字节
2)该字节的值,就是要填充的字节的个数
如果要填充8个字节,那么填充的字节的值就是0×8;
要填充7个字节,那么填入的值就是0×7;
…
如果只填充1个字节,那么填入的值就是0×1;
这种填充方法也叫PKCS5, 恰好8个字节时还要补8个字节的0×08
正是这种即使恰好是8个字节也需要再补充字节的规定,可以让解密的数据很确定无误的移除多余的字节。
参考资料:
[1]Java DESede encrypt, OpenSSL equivalent
http://stackoverflow.com/questions/9038298/java-desede-encrypt-openssl-equivalent
[2] DES 算法的 C++ 与 JAVA 互相加解密
http://www.cnblogs.com/WonKerr/archive/2009/11/11/DES_C_JAVA.html
[3]Java中3DES加密解密与其他语言(如C/C++)通信
http://lijunjie337.iteye.com/blog/717911
[4]pkcs#5和pkcs#7填充的区别
http://hi.baidu.com/tweetyf/item/36d2f94a8639320ae8350480
[5]使用openssl库实现des,3des加密
http://blog.chinaunix.net/uid-25943311-id-3020013.html