DES加解密 cbc模式 的簡單講解 && C++用openssl庫來實現的注意事項

DES cbc是基於數據塊加密的。數據塊的長度爲8字節64bit。以數據塊爲單位循環加密,再拼接。每一個數據塊加密的祕鑰同樣,IV向量不一樣。第一個數據快所需的IV向量,須要咱們提供,從第二個數據塊開始,所需的IV向量爲上一個數據塊生成的密文。html

IV向量該怎麼賦值, 它跟祕鑰KEY有什麼關係,這一點,我暫時不清楚,若是您知道,請留言講一下,很是感謝。我知道的是java裏頭調用庫只傳了一個KEY參數,工做經驗認知是,java默認IV向量跟祕鑰KEY是同樣的值。java

DES加密的填充方式有多種,分別是 ansix92三、iso1012六、zeropadding、pkcs5padding、pkcs7padding。 那麼cbc模式加密的填充方式也不例外。然而,解密的過程,只須要把密文分割成8字節一塊,循環解密再作拼接。加密

C++可調用openssl庫實現DES加解密。可是openssl提供的接口只知足對一個數據塊8個字節的加解密,實際使用,須要本身實現不一樣的填充方式。htm

openssl庫加密的結果是不可識別的二進制字符串,須要轉爲可識別的十六進制或者Base64格式。blog

由於工做中用到三種,下面對三種填充方式作簡單講解。  接口

1、zeropaddingssl

  若是明文正好是8字節整數倍長度,則不需填充。若是明文不是8字節整數倍長度,則最後一部分,不足8字節,用0填充。字符串

  12345678        ----->> 12345678get

       12345678 12345678  ----->> 12345678 12345678openssl

       12345678 91           ----->>  12345678  91000000

  12345678 9123              ----->>12345678 91230000

2、pkcs5padding

      若是明文正好是8字節整數倍長度,則不需填充。若是明文不是8字節整數倍長度,則最後一部分,剩餘m字節,差n=(8-m)字節,用n填充

  12345678        ----->> 12345678

       12345678 12345678  ----->>  12345678 12345678

       12345678 91           ----->>  12345678  91777777

  12345678 9123              ----->>  12345678  91234444

3、pkcs7padding

   同pkcs5padding

 

 

附1:C++調用openssl庫實現的DES加密解密完整代碼

附2:C++二進制字符串轉十六進制字符串  C++十六進制字符串轉二進制字符串

附3:C++二進制字符串轉Base64字符串    C++Base64字符串轉二進制字符串        C++base64格式和nonSafeBase64格式轉換

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

相關文章
相關標籤/搜索