最全對稱加密---分組加密總結到位


加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。
對稱加密又分為分組加密序列密碼
分組密碼,也叫塊加密(block cyphers),一次加密明文中的一個塊。是將明文按一定的位長分組,明文組經過加密運算得到密文組,密文組經過解密運算(加密運算的逆運算),還原成明文組。
序列密碼,也叫流加密(stream cyphers),一次加密明文中的一個位。是指利用少量的密鑰(制亂元素)通過某種復雜的運算(密碼算法)產生大量的偽隨機位流,用於對明文位流的加密。
解密是指用同樣的密鑰和密碼算法及與加密相同的偽隨機位流,用以還原明文位流。

一.如何分組

分組加密算法中,有ECB,CBC,CFB,OFB這幾種算法模式。

 

1)ECB(Electronic Code Book)/電碼本模式

DES ECB(電子密本方式)其實非常簡單,就是將數據按照8個字節一段進行DES加密或解密得到一段8個字節的密文或者明文,最后一段不足8個字節,按照需求補足8個字節進行計算,之后按照順序將計算所得的數據連在一起即可,各段數據之間互不影響。

特點:

1.簡單,有利於並行計算,誤差不會被傳送;
2.不能隱藏明文的模式;
repetitions in message may show in cipher text/在密文中出現明文消息的重復 
3.可能對明文進行主動攻擊;
加密消息塊相互獨立成為被攻擊的弱點/weakness due to encrypted message blocks being independent

 

2)CBC(Cipher Block Chaining)/密文分組鏈接方式

DES CBC(密文分組鏈接方式)有點麻煩,它的實現機制使加密的各段數據之間有了聯系。其實現的機理如下:

 

加密步驟如下:

1)首先將數據按照8個字節一組進行分組得到D1D2......Dn(若數據不是8的整數倍,用指定的PADDING數據補位)

2)第一組數據D1與初始化向量I異或后的結果進行DES加密得到第一組密文C1(初始化向量I為全零)

3)第二組數據D2與第一組的加密結果C1異或以后的結果進行DES加密,得到第二組密文C2

4)之后的數據以此類推,得到Cn

5)按順序連為C1C2C3......Cn即為加密結果。

 

解密是加密的逆過程,步驟如下:

1)首先將數據按照8個字節一組進行分組得到C1C2C3......Cn

2)將第一組數據進行解密后與初始化向量I進行異或得到第一組明文D1(注意:一定是先解密再異或)

3)將第二組數據C2進行解密后與第一組密文數據進行異或得到第二組數據D2

4)之后依此類推,得到Dn

5)按順序連為D1D2D3......Dn即為解密結果。

這里注意一點,解密的結果並不一定是我們原來的加密數據,可能還含有你補得位,一定要把補位去掉才是你的原來的數據。

特點:
1. 不容易主動攻擊,安全性好於ECB,適合傳輸長度長的報文,是SSL、IPSec的標准。
each ciphertext block depends on all message blocks/每個密文塊依賴於所有的信息塊
thus a change in the message affects all ciphertext blocks/明文消息中一個改變會影響所有密文塊
2. need Initial Vector (IV) known to sender & receiver/發送方和接收方都需要知道初始化向量 
3.加密過程是串行的,無法被並行化(在解密時,從兩個鄰接的密文塊中即可得到一個平文塊。因此,解密過程可以被並行化)。
 

3)Cipher Feedback (CFB)/密文反饋模式

密文反饋(CFB,Cipher feedback)模式類似於CBC,可以將塊密碼變為自同步的流密碼;工作過程亦非常相似,CFB的解密過程幾乎就是顛倒的CBC的加密過程:
需要使用一個與塊的大小相同的移位寄存器,並用IV將寄存器初始化。然后,將寄存器內容使用塊密碼加密,然后將結果的最高x位與平文的x進行異或,以產生密文的x位。下一步將生成的x位密文移入寄存器中,並對下面的x位平文重復這一過程。解密過程與加密過程相似,以IV開始,對寄存器加密,將結果的高x與密文異或,產生x位平文,再將密文的下面x位移入寄存器。
與CBC相似,平文的改變會影響接下來所有的密文,因此加密過程不能並行化;而同樣的,與CBC類似,解密過程是可以並行化的。
 

4)Output Feedback (OFB)/輸出反饋模式

輸出反饋模式(Output feedback, OFB)可以將塊密碼變成同步的流密碼。它產生密鑰流的塊,然后將其與平文塊進行異或,得到密文。與其它流密碼一樣,密文中一個位的翻轉會使平文中同樣位置的位也產生翻轉。這種特性使得許多錯誤校正碼,例如奇偶校驗位,即使在加密前計算而在加密后進行校驗也可以得出正確結果。
每個使用OFB的輸出塊與其前面所有的輸出塊相關,因此不能並行化處理。然而,由於平文和密文只在最終的異或過程中使用,因此可以事先對IV進行加密,最后並行的將平文或密文進行並行的異或處理。
可以利用輸入全0的CBC模式產生OFB模式的密鑰流。這種方法十分實用,因為可以利用快速的CBC硬件實現來加速OFB模式的加密過程。

 

二.如何加密

      DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合。

              已破解,不再安全,基本沒有企業在用了
     3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。密鑰長度112/168(JDK)、128/192(BC)

             遭遇AES出來代替DES,計算密鑰時間太長,加速效率不高,所以也基本不再用了
     AES(Advanced Encryption Standard):高級加密標准,是下一代的加密算法標准,速度快,安全級別高;

             最常用的對稱加密算法

 

    IDEA  常用的電子郵件加密算法,工作模式只有ECB  密鑰長度128位

 

 Blowfish   加密算法是一種對稱的分組加密算法,每次加密一個64位分組,使用32位~448位的可變長度密鑰,應用於內部加密。加密過程分為兩個階段:密鑰預處理和信息加密。
  加密函數blowfish—encrypt()輸入64位明文,輸出64位密文。
 
  RC5加密:  一種分組密碼,其參數都是可變的。通常分組大小為32,64或128位,其密鑰長度可達2048位。用於加密和解密的輪數也是可變的,最多可達255輪
 
   RC6加密: 屬性與RC5相同。對RC5進行了一些修改,提高了真題速度
 
  SM4:這是我國第一次公布自己的商用密碼算法。DES和AES和國產的SM4都是為了加密保護靜態儲存和傳輸信道中的數據
  SM1:算法未公開,僅知密鑰長度為128位,強度和AES相同,調用該算法需要通過加密芯片的接口進行調用。
 
 
   在國際目前主流的還是3DES 和AES 但是在國內 由於法律 主流為SM1  SM4。
 
 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM