1. 程式人生 > >Java DESede用C++ Openssl實現

Java DESede用C++ Openssl實現

最近在看一個專案的程式碼

開發語言: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

[2] DES 演算法的 C++ 與 JAVA 互相加解密

[3]Java中3DES加密解密與其他語言(如C/C++)通訊

[4]pkcs#5和pkcs#7填充的區別

[5]使用openssl庫實現des,3des加密