密碼算法特性

1.凱撒密碼

凱撒密碼是一種替換字碼的目標就是加密文本,其實思路非常簡單:將字表表中的一個字符用另一個字符替換,加密是通過將前字母替換爲在常規字母表中第n個位置後的弟3時相下來完成。例如,當選擇n=3時,這個替換(其中n相當於**)如下

          

 

二、.序列密碼

Enigma與既散密碼一樣屬於→種換位密碼,換位密碼非常容易被**,例如:蠻力攻擊或窮盡密碼搜索,攻擊者通過信道竊聽獲得密文,在愷撒密碼中,**就是字母表平移的字數。由於字母表只有26個字母,因此加密用的**只有0到25共26種。雖然 Enigma是隨機換位,但是依然能通過字母頻率分析出內容。

因此,爲了更安全的加密,出現了序列密碼這種加密方法,序列密碼的特點是將明文和**進行異或運算,如:明文a,ASCL碼爲97,二進制碼01100001:**爲B,ASCL碼爲66,二進制碼01000010,然後在按位異或序列密碼用於單獨加密每個位。它是通過將**序列中的每個位與每個明文位相加實現的。
 

     明文

0

1

1

0

0

0

0

1

     **

0

1

0

0

0

0

1

0

     密文 0 0 1 0 0 0 1 1

三、分組密碼

 

1.分組密碼

分組密碼( block cipher)是將明文消息編碼表示後的數字(簡稱明文數字)序列,劃分成長度爲n個組,每個組有m個字節。每組分別在**的控制下變換成等長的輸出數字簡稱密文數字)序列

分組密碼加密固定長度的分組,需要加密的明文長度可能超過分組密碼的分組長度,此時就需要對分組密碼算法進行迭代,以便將長明文進行加密,迭代的方法就稱爲分組密碼的模式

1.2如何分組

1)ECB模式(電子密碼本模式)

ECB模式是將明文消息分成固定大小的分組,當最後一個分組的內容小於分組長度時,需要用特定的數據進行填充以至於長度等於分組長度,每個分組的加密和解密都是獨立的,可以進行並行操作。使用ECB模式加密時,相同的明文分組會轉換爲相同的密文分組,也就是說,我們可以將其理解爲是一個巨大的「明文分組->密文分組」的對應表,因此ECB模式也稱爲電子密碼本模式,但是安全性較低

默認模式,數據按照8個字節一段進行加密或解密得到一段8個字節的密文或者明文,最後一段不足8個字節,則補足8個字節來進行計算,之後按照順序將計算機所得的數據連在一起即可,各段數據之前互不影響

PKCS7Padding(PKCS5Padding)填充方式:爲.NET和JAVA的默認填充方式,對加密數據字節長度對8取餘爲r,如r大於0,則補8-r的值;如果r=0,則補8個字節8比如

加密字符串爲AAA,則補位爲AAA55555

加密字符串爲BBBBBB,則補位爲BBBBBB22

加密字符串爲CCCCCCCC,則補位爲CCCCCCCC88888888

2)CBC模式(密碼分組鏈接模式)

CBC模式中的第一個分組需要用初始化向量IV(一個隨機的且長度爲個分組長度的比特序列)進行異或操作再進行加密,而後面的每一個分組都要先和前一個分組加密後的密文分組進行異或操作,然後再加密。加密是連續的,不能進行並行操作。無法對單獨一箇中間的明文分組加密;對初始化向量沒有加密。當CBC模式中的密文分組有一個分組損壞,只要密文分組的長度沒有發生變化,解密時最多會有兩個分組受到數據損壞的影響。當CBC的密文分組中有一些比特缺失了,導致密碼分組的長度發生變化,此分組發生錯位,在缺失比特位置之後的密文分組也就無法全部解密了


3)CFB模式(密文反饋模式

CFB模式是將前一個分組的密文加密後和當前分組的明文進行異或操作生成當前分組的密文,第一個明文分組通過初始化向量V進行加密再與之進行異或操作得到第一個密文分組。CFB模式中有密碼算法產生的比特序列成爲**流(在CFB中密碼算法相當於僞隨機數生成器),在CFB中分組密碼算法在解密時仍執行加密操作(因爲**流通過加密生成)對CFB模式可實施重放攻擊

4)OFB模式(輸出反饋模式)

CFB模式是通過將明文分組和密碼算法的輸出進行異或操作來產生密文分組的,也需要使用初始化向量(IV)。密碼算法的輸出會反饋到密碼算法的輸入中,並非通過密碼算法加密明文分組的,而通過將明文分組和密碼算法的輸出進行XOR來產生密文分組(與CFB的區別在於密碼算法的輸入)。CFB是對密文分組進行反饋,必須按順序進行加密:OFB是對**流進行加密(生成**流與XOR運算可以並行)

5)CRT(計數器模式)

CRT模式中,每次加密時都會產生成一個不同的值來作爲計數器的初始值,每一個分組對應一個逐次累加計算器,通過對計算器進行加密來生成**流,在將**流,與明文分組進行異或操作得到密文分組