1. 程式人生 > >C++ 使用openssl庫實現 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

C++ 使用openssl庫實現 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

  之前工作上需要用C++把軟體生成的使用者序列號用des加密cbc的模式,加密後為二進位制,轉化為十六進位制,然後提供給java寫的授權碼管理平臺。 java平臺會根據使用者序列號,生成一個授權碼,授權碼是用rsa 私加公解的模式加密的,加密後為二進位制,然後轉為safeBase64格式。授權碼拿來在C++的軟體上授權,C++首先將safeBase64格式轉為base64格式,再轉為二進位制,然後rsa解密出來得到明文。

  現在回頭整理那段時間的工作。小吐槽一下,想想碰到的坑,腦瓜疼。

    先說DES加解密。java告訴用des加密,自己沒接觸過,網上找了一段程式碼,呼叫openssl庫實現的des加解密,ecb模式的,折騰一番,實現了加密解密。跟java一碰,發現完全對不上。java檢視程式碼,發現庫函式有cbc的字樣,用的cbc模式。ok嘛,接著實現cbc模式。頭疼的是找遍了百度和谷歌,都沒有找到有實現cbc模式的C++程式碼。怎麼辦呢,我就對照著ecb的實現,和cbc模式加密的理論,自己做。幸運的是,做出來了。來實現cbc模式的加解密, 在呼叫openssl庫的介面時,需要傳入密匙和IV向量。網上的程式碼有的IV向量是隨意的,有的是全零。然後我發現,IV向量的值並非隨心所欲就能實現加密解密。然後我用了網上的一個數組值,自己可以加密解密了。然後我把密匙設定為跟java一致,結果卻不美好,加密的結果跟java不相同,也不能把java的密文解密出來。然後呢,java呼叫的庫函式,只需要提供一個密匙KEY,因此java也不清楚問題出在哪。跟java反覆的討論中,java同事廷謀哥說,把IV向量設定為密匙KEY試試,一試便成功了。