playfair演算法
⑴ 加密解密工具:普萊費爾密碼
普萊費爾密碼(英文:Playfair Cipher 或 Playfair Square)是一種使用一個關鍵詞方格來加密字元對的加密法,1854年由一位名叫查爾斯·惠斯通(Charles Wheatstone)的英國人發明。
簡介
經萊昂·普萊費爾提倡在英國軍地和政府使用。它有一些不太明顯的特徵:密文的字母數一定是偶數;任意兩個同組的字母都不會相同,如果出現這種字元必是亂碼和虛碼。
它使用方便而且可以讓頻度分析法變成瞎子,在1854到1855年的克里米亞戰爭和1899年的布爾戰爭中有廣泛應用。但在1915年的一戰中被破譯了。
編寫分三步:
1.編制密碼表
2.整理明文
3.編寫密文 構成部分:
1.密鑰
2.明文
3.密文
4.註明的某個字母代替的另一個字母。
演算法
它依據一個5*5的正方形組成的密碼表來編寫,密碼表裡排列有25個字母。5*5的密碼表,共有5行5列字母。第一列(或第一行)是密鑰,其餘按照字母順序,如果密鑰過長可佔用第二列或行。密鑰是一個單詞或片語,若有重復字母,可將後面重復的字母去掉。當然也要把使用頻率最少的字母去掉(它依據一個5*5的正方形組成的密碼表來編寫,密碼表裡排列有25個字母。如果一種語言字母超過25個,可以去掉使用頻率最少的一個。如,法語一般去掉w或k,德語則是把i和j合起來當成一個字母看待,英語中z使用最少,可以去掉它)。
工具鏈接: http://www.atoolbox.net/Tool.php?Id=912
⑵ 密文是什麼 具體給我講解一下
密文是相對於明文說的,明文其實就是你要傳達的消息,而明文通過加密之後就成了密文,密文其實是信息安全的一個詞彙。幫你介紹一下。
信息安全的發展歷史
通信保密科學的誕生
古羅馬帝國時期的Caesar密碼:能夠將明文信息變換為人們看不懂的字元串,(密文),當密文傳到夥伴手中時,又可方便的還原為原來的明文形式。 Caesar密碼由明文字母循環移3位得到。
1568年,L.Battista發明了多表代替密碼,並在美國南北戰爭期間有聯軍使用。例:Vigenere密碼和Beaufort密碼
1854年,Playfair發明了多字母代替密碼,英國在第一次世界大戰中使用了此密碼。例:Hill密碼,多表、多字母代替密碼成為古典密碼學的主流。
密碼破譯技術(密碼分析)的發展:例:以1918年W.Friedman使用重合指數破譯多表代替密碼技術為里程碑。 1949年C.Shannon的《保密系統的通信理論》文章發表在貝爾系統技術雜志上。這兩個成果為密碼學的科學研究奠定了基礎。從藝術變為科學。實際上,這就是通信保密科學的誕生,其中密碼是核心技術。
公鑰密碼學革命
25年之後,20世紀70年代,IBM公司的DES(美國數據加密標准)和1976年Diffie-Hellman,提出了公開密鑰密碼思想,1977年公鑰密碼演算法RSA的提出為密碼學的發展注入了新的活力。
公鑰密碼掀起了一場革命,對信息安全有三方面的貢獻:首次從計算復雜性上刻畫了密碼演算法的強度,突破了Shannon僅關心理論強度的局限性;他將傳統密碼演算法中兩個密鑰管理中的保密性要求,轉換為保護其中一格的保密性及另一格的完整性的要求;它將傳統密碼演算法中密鑰歸屬從通信兩方變為一個單獨的用戶,從而使密鑰的管理復雜度有了較大下降。
公鑰密碼的提出,注意:一是密碼學的研究逐步超越了數據的通信保密范圍,開展了對數據的完整性、數字簽名等技術的研究;二是隨著計算機和網路的發展,密碼學一逐步成為計算機安全、網路安全的重要支柱,使得數據安全成為信息安全的全新內容,超越了以往物理安全占據計算機安全的主導地位狀態。
訪問控制技術與可信計算機評估准則
1969年,B.Lampson提出了訪問控制模型。
1973年,D.Bell 和L.Lapala,創立了一種模擬軍事安全策略的計算機操作模型,這是最早也是最常用的一種計算機多級安全模型。
1985年,美國國防部在Bell-Lapala模型的基礎上提出了可信計算機評估准則(通常稱為橘皮書)。按照計算機系統的安全防護能力,分成8個等級。
1987年,Clark-Wilson模型針對完整性保護和商業應用提出的。
信息保障
1998年10月,美國國家安全局(NSA)頒布了信息保障技術框架1.1版,2003年2月6日,美國國防部(DOD)頒布了信息保障實施命令8500.2,從而信息保障成為美國國防組織實施信息化作戰的既定指導思想。
信息保障(IA:information assurance):通過確保信息的可用性、完整性、可識別性、保密性和抵賴性來保護信息系統,同時引入保護、檢測及響應能力,為信息系統提供恢復功能。這就是信息保障模型PDRR。
protect保護、detect檢測、react響應、restore 恢復
美國信息保障技術框架的推進使人們意識到對信息安全的認識不要停留在保護的框架之下,同時還需要注意信息系統的檢測和響應能力。
2003年,中國發布了《國家信息領導小組關於信息安全保障工作的意見》,這是國家將信息安全提到戰略高度的指導性文件
信息保密技術的研究成果:
發展各種密碼演算法及其應用:
DES(數據加密標准)、RSA(公開密鑰體制)、ECC(橢圓曲線離散對數密碼體制)等。
計算機信息系統安全模型和安全評價准則:
訪問監視器模型、多級安全模型等;TCSEC(可信計算機系統評價准則)、ITSEC(信息技術安全評價准則)等。
加密(Encryption)
加密是通過對信息的重新組合,使得只有收發雙方才能解碼並還原信息的一種手段。
傳統的加密系統是以密鑰為基礎的,這是一種對稱加密,也就是說,用戶使用同一個密鑰加密和解密。
目前,隨著技術的進步,加密正逐步被集成到系統和網路中,如IETF正在發展的下一代網際協議IPv6。硬體方面,Intel公司也在研製用於PC機和伺服器主板的加密協處理器。
身份認證(Authentication)
防火牆是系統的第一道防線,用以防止非法數據的侵入,而安全檢查的作用則是阻止非法用戶。有多種方法來鑒別一個用戶的合法性,密碼是最常用的,但由於有許多用戶採用了很容易被猜到的單詞或短語作為密碼,使得該方法經常失效。其它方法包括對人體生理特徵(如指紋)的識別,智能IC卡和USB盤。
數字簽名(Digital Signature)
數字簽名可以用來證明消息確實是由發送者簽發的,而且,當數字簽名用於存儲的數據或程序時,可以用來驗證數據或程序的完整性。
美國政府採用的數字簽名標准(Digital Signature Standard,DSS)使用了安全哈希運演算法則。用該演算法對被處理信息進行計算,可得到一個160位(bit)的數字串,把這個數字串與信息的密鑰以某種方式組合起來,從而得到數字簽名。
內容檢查(Content Inspection)
即使有了防火牆、身份認證和加密,人們仍擔心遭到病毒的攻擊。有些病毒通過E-mail或用戶下載的ActiveX和Java小程序(Applet)進行傳播,帶病毒的Applet被激活後,又可能會自動下載別的Applet。現有的反病毒軟體可以清除E-mail病毒,對付新型Java和ActiveX病毒也有一些辦法,如完善防火牆,使之能監控Applet的運行,或者給Applet加上標簽,讓用戶知道他們的來源。
介紹一些加密的知識
密鑰加/解密系統模型
在1976年,Diffie及Hellman發表其論文「New Directions in Cryptography」[9]之前,所謂的密碼學就是指對稱密鑰密碼系統。因為加/解密用的是同一把密鑰,所以也稱為單一密鑰密碼系統。
這類演算法可謂歷史悠久,從最早的凱撒密碼到目前使用最多的DES密碼演算法,都屬於單一密鑰密碼系統。
通常,一個密鑰加密系統包括以下幾個部分:
① 消息空間M(Message)
② 密文空間C(Ciphertext)
③ 密鑰空間K(Key)
④ 加密演算法E(Encryption Algorithm)
⑤ 解密演算法D(Decryption Algorithm)
消息空間中的消息M(稱之為明文)通過由加密密鑰K1控制的加密演算法加密後得到密文C。密文C通過解密密鑰K2控制的解密演算法又可恢復出原始明文M。即:
EK1(M)=C
DK2(C)=M
DK2(EK1(M))=M
概念:
當演算法的加密密鑰能夠從解密密鑰中推算出來,或反之,解密密鑰可以從加密密鑰中推算出來時,稱此演算法為對稱演算法,也稱秘密密鑰演算法或單密鑰演算法;
當加密密鑰和解密密鑰不同並且其中一個密鑰不能通過另一個密鑰推算出來時,稱此演算法為公開密鑰演算法。
1.凱撒密碼變換
更一般化的移位替代密碼變換為
加密:E(m)=(m+k) mod 26
解密:D(c)=(c-k) mod 26
2.置換密碼
在置換密碼中,明文和密文的字母保持相同,但順序被打亂了。在簡單的縱行置換密碼中,明文以固定的寬度水平地寫在一張圖表紙上,密文按垂直方向讀出;解密就是將密文按相同的寬度垂直地寫在圖表紙上,然後水平地讀出明文。例如:
明文:encryption is the transformation of data into some unreadable form
密文:eiffob nsodml ctraee rhmtuf yeaano pttirr trinem iaota onnod nsosa
20世紀40年代,Shannon提出了一個常用的評估概念。特認為一個好的加密演算法應具有模糊性和擴散性。
模糊性:加密演算法應隱藏所有的局部模式,即,語言的任何識別字元都應變得模糊,加密法應將可能導致破解密鑰的提示性語言特徵進行隱藏;
擴散性:要求加密法將密文的不同部分進行混合,是任何字元都不在其原來的位置。
加密演算法易破解的原因是未能滿足這兩個Shannon條件。
數據加密標准(DES)
DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,其功能是把輸入的64位數據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位,經過16次迭代運算後。得到L16、R16,將此作為輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算.
具體方法 需要圖 我放不上去對不起了
可以將DES演算法歸結如下:
子密鑰生成:
C[0]D[0] = PC–1(K)
for 1 <= i <= 16
{C[i] = LS[i](C[i−1])
D[i] = LS[i](D[i−1])
K[i] = PC–2(C[i]D[i])}
加密過程:
L[0]R[0] = IP(x)
for 1 <= i <= 16
{L[i] = R[i−1]
R[i] = L[i−1] XOR f (R[i−1], K[i])}
c= IP−1(R[16]L[16])v
解密過程:
R[16]L[16] = IP(c)
for 1 <= i <= 16
{R[i−1] = L[i]
L[i−1] = R[i] XOR f (L[i], K[i])}
x= IP−1(L[0]R[0])
DES使用56位密鑰對64位的數據塊進行加密,並對64位的數據塊進行16輪編碼。與每輪編碼時,一個48位的「每輪」密鑰值由56位的完整密鑰得出來。DES用軟體進行解碼需要用很長時間,而用硬體解碼速度非常快,但幸運的是當時大多數黑客並沒有足夠的設備製造出這種硬體設備。
在1977年,人們估計要耗資兩千萬美元才能建成一個專門計算機用於DES的解密,而且需要12個小時的破解才能得到結果。所以,當時DES被認為是一種十分強壯的加密方法。 但是,當今的計算機速度越來越快了,製造一台這樣特殊的機器的花費已經降到了十萬美元左右,所以用它來保護十億美元的銀行間線纜時,就會仔細考慮了。另一個方面,如果只用它來保護一台伺服器,那麼DES確實是一種好的辦法,因為黑客絕不會僅僅為入侵一個伺服器而花那麼多的錢破解DES密文。由於現在已經能用二十萬美圓製造一台破譯DES的特殊的計算機,所以現在再對要求「強壯」加密的場合已經不再適用了
DES演算法的應用誤區
DES演算法具有極高安全性,到目前為止,除了用窮舉搜索法對DES演算法進行攻擊外,還沒有發現更有效的辦法。而56位長的密鑰的窮舉空間為256,這意味著如果一台計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這是難以實現的,當然,隨著科學技術的發展,當出現超高速計算機後,我們可考慮把DES密鑰的長度再增長一些,以此來達到更高的保密程度。
由上述DES演算法介紹我們可以看到:DES演算法中只用到64位密鑰中的其中56位,而第8、16、24、......64位8個位並未參與DES運算,這一點,向我們提出了一個應用上的要求,即DES的安全性是基於除了8,16,24,......64位外的其餘56位的組合變化256才得以保證的。因此,在實際應用中,我們應避開使用第8,16,24,......64位作為有效數據位,而使用其它的56位作為有效數據位,才能保證DES演算法安全可靠地發揮作用。如果不了解這一點,把密鑰Key的8,16,24,..... .64位作為有效數據使用,將不能保證DES加密數據的安全性,對運用DES來達到保密作用的系統產生數據被破譯的危險,這正是DES演算法在應用上的誤區,留下了被人攻擊、被人破譯的極大隱患。
A5 算 法
序列密碼簡介
序列密碼又稱流密碼,它將明文劃分成字元(如單個字母)或其編碼的基本單元(如0、1),然後將其與密鑰流作用以加密,解密時以同步產生的相同密鑰流實現。
序列密碼強度完全依賴於密鑰流產生器所產生的序列的隨機性和不可預測性,其核心問題是密鑰流生成器的設計。而保持收發兩端密鑰流的精確同步是實現可靠解密的關鍵技術。
A5演算法
A5演算法是一種序列密碼,它是歐洲GSM標准中規定的加密演算法,用於數字蜂窩行動電話的加密,加密從用戶設備到基站之間的鏈路。A5演算法包括很多種,主要為A5/1和A5/2。其中,A5/1為強加密演算法,適用於歐洲地區;A5/2為弱加密演算法,適用於歐洲以外的地區。這里將詳細討論A5/1演算法。
A5/1演算法的主要組成部分是三個長度不同的線性反饋移位寄存器(LFSR)R1、R2和R3,其長度分別為19、22和23。三個移位寄存器在時鍾的控制下進行左移,每次左移後,寄存器最低位由寄存器中的某些位異或後的位填充。各寄存器的反饋多項式為:
R1:x18+x17+x16+x13
R2:x21+x20
R3:x22+x21+x20+x7
A5演算法的輸入是64位的會話密鑰Kc和22位的隨機數(幀號)。
IDEA
IDEA即國際數據加密演算法,它的原型是PES(Proposed Encryption Standard)。對PES改進後的新演算法稱為IPES,並於1992年改名為IDEA(International Data Encryption Algorithm)。
IDEA是一個分組長度為64位的分組密碼演算法,密鑰長度為128位,同一個演算法即可用於加密,也可用於解密。
IDEA的加密過程包括兩部分:
(1) 輸入的64位明文組分成四個16位子分組:X1、X2、X3和X4。四個子分組作為演算法第一輪的輸入,總共進行八輪的迭代運算,產生64位的密文輸出。
(2) 輸入的128位會話密鑰產生八輪迭代所需的52個子密鑰(八輪運算中每輪需要六個,還有四個用於輸出變換)
子密鑰產生:輸入的128位密鑰分成八個16位子密鑰(作為第一輪運算的六個和第二輪運算的前兩個密鑰);將128位密鑰循環左移25位後再得八個子密鑰(前面四個用於第二輪,後面四個用於第三輪)。這一過程一直重復,直至產生所有密鑰。
IDEA的解密過程和加密過程相同,只是對子密鑰的要求不同。下表給出了加密子密鑰和相應的解密子密鑰。
密鑰間滿足:
Zi(r) ⊙ Zi(r) −1=1 mod (216+1)
−Zi(r) + Zi(r) =0 mod (216+1)
Blowfish演算法
Blowfish是Bruce Schneier設計的,可以免費使用。
Blowfish是一個16輪的分組密碼,明文分組長度為64位,使用變長密鑰(從32位到448位)。Blowfish演算法由兩部分組成:密鑰擴展和數據加密。
1. 數據加密
數據加密總共進行16輪的迭代,如圖所示。具體描述為(將明文x分成32位的兩部分:xL, xR)
for i = 1 to 16
{
xL = xL XOR Pi
xR = F(xL) XOR xR
if
{
交換xL和xR
}
}
xR = xR XOR P17
xL = xL XOR P18
合並xL 和xR
其中,P陣為18個32位子密鑰P1,P2,…,P18。
解密過程和加密過程完全一樣,只是密鑰P1,P2,…,P18以逆序使用。
2. 函數F
把xL分成四個8位子分組:a, b, c 和d,分別送入四個S盒,每個S盒為8位輸入,32位輸出。四個S盒的輸出經過一定的運算組合出32位輸出,運算為
F(xL) =((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232
其中,Si,x表示子分組x(x=a、b、c或d)經過Si (i=1、2、3或4)盒的輸出。
沒有太多地方寫了,不把整個過程列上面了,就簡單介紹一下好了。
GOST演算法
GOST是前蘇聯設計的分組密碼演算法,為前蘇聯國家標准局所採用,標准號為:28147–89[5]。
GOST的消息分組為64位,密鑰長度為256位,此外還有一些附加密鑰,採用32輪迭代。
RC5演算法
RC5是一種分組長度、密鑰長度和加密迭代輪數都可變的分組密碼體制。RC5演算法包括三部分:密鑰擴展、加密演算法和解密演算法。
PKZIP演算法
PKZIP加密演算法是一個一次加密一個位元組的、密鑰長度可變的序列密碼演算法,它被嵌入在PKZIP數據壓縮程序中。
該演算法使用了三個32位變數key0、key1、key2和一個從key2派生出來的8位變數key3。由密鑰初始化key0、key1和key2並在加密過程中由明文更新這三個變數。PKZIP序列密碼的主函數為updata_keys()。該函數根據輸入位元組(一般為明文),更新三個32位的變數並獲得key3。
重點:單向散列函數
MD5 算 法
md5的全稱是message-digestalgorithm5(信息-摘要演算法),在90年代初由和rsadatasecurityinc的ronaldl.rivest開發出來,經md2、md3和md4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是md2、md4還是md5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但md2的設計與md4和md5完全不同,那是因為md2是為8位機器做過設計優化的,而md4和md5卻是面向32位的電腦。
rivest在1989年開發出md2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,rogier和chauvaud發現如果忽略了檢驗和將產生md2沖突。md2演算法的加密後結果是唯一的--既沒有重復。 為了加強演算法的安全性,rivest在1990年又開發出md4演算法。md4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod512=448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位damg?rd/merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。denboer和bosselaers以及其他人很快的發現了攻擊md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到md4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,md4就此被淘汰掉了。 盡管md4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了md5以外,其中比較有名的還有sha-1、ripe-md以及haval等。
一年以後,即1991年,rivest開發出技術上更為趨近成熟的md5演算法。它在md4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然md5比md4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和md4設計有少許不同的步驟組成。在md5演算法中,信息-摘要的大小和填充的必要條件與md4完全相同。denboer和bosselaers曾發現md5演算法中的假沖突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。 vanoorschot和wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(brute-forcehashfunction),而且他們猜測一個被設計專門用來搜索md5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代md5演算法的md6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響md5的安全性。上面所有這些都不足以成為md5的在實際應用中的問題。並且,由於md5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,md5也不失為一種非常優秀的中間技術),md5怎麼都應該算得上是非常安全的了。
演算法
MD表示消息摘要(Message Digest)。MD5是MD4的改進版,該演算法對輸入的任意長度消息產生128位散列值(或消息摘要。MD5演算法可用圖4-2表示。
對md5演算法簡要的敘述可以為:md5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
1) 附加填充位
首先填充消息,使其長度為一個比512的倍數小64位的數。填充方法:在消息後面填充一位1,然後填充所需數量的0。填充位的位數從1~512。
2) 附加長度
將原消息長度的64位表示附加在填充後的消息後面。當原消息長度大於264時,用消息長度mod 264填充。這時,消息長度恰好是512的整數倍。令M[0 1…N−1]為填充後消息的各個字(每字為32位),N是16的倍數。
3) 初始化MD緩沖區
初始化用於計算消息摘要的128位緩沖區。這個緩沖區由四個32位寄存器A、B、C、D表示。寄存器的初始化值為(按低位位元組在前的順序存放):
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
4) 按512位的分組處理輸入消息
這一步為MD5的主循環,包括四輪,如圖4-3所示。每個循環都以當前的正在處理的512比特分組Yq和128比特緩沖值ABCD為輸入,然後更新緩沖內容。
四輪操作的不同之處在於每輪使用的非線性函數不同,在第一輪操作之前,首先把A、B、C、D復制到另外的變數a、b、c、d中。這四個非線性函數分別為(其輸入/輸出均為32位字):
F(X,Y,Z) = (XY)((~X) Z)
G(X,Y,Z) = (XZ)(Y(~Z))
H(X,Y,Z) = XYZ
I(X,Y,Z) = Y(X(~Z))
其中,表示按位與;表示按位或;~表示按位反;表示按位異或。
此外,由圖4-4可知,這一步中還用到了一個有64個元素的表T[1..64],T[i]=232×abs(sin(i)),i的單位為弧度。
根據以上描述,將這一步驟的處理過程歸納如下:
for i = 0 to N/16−1 do
/* 每次循環處理16個字,即512位元組的消息分組*/
/*把第i個字塊(512位)分成16個32位子分組拷貝到X中*/
for j = 0 to 15 do
Set X[j] to M[i*16+j]
end /*j 循環*/
/*把A存為AA,B存為BB,C存為CC,D存為DD*/
AA = A
BB = B
CC = C
DD = D
/* 第一輪*/
/* 令[abcd k s i]表示操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
其中,Y<<<s表示Y循環左移s位*/
/* 完成下列16個操作*/
[ABCD 0 7 1 ] [DABC 1 12 2 ] [CDAB 2 17 3 ] [BCDA 3 22 4 ]
[ABCD 4 7 5 ] [DABC 5 12 6 ] [CDAB 6 17 7 ] [BCDA 7 22 8 ]
[ABCD 8 7 9 ] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* 第二輪*/
/*令[abcd k s i]表示操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成下列16個操作*/
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/*第三輪*/
/*令[abcd k s t]表示操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成以下16個操作*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/*第四輪*/
/*令[abcd k s t]表示操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) */
/*完成以下16個操作*/
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /*i循環*/
5) 輸出
由A、B、C、D四個寄存器的輸出按低位位元組在前的順序(即以A的低位元組開始、D的高位元組結束)得到128位的消息摘要。
以上就是對MD5演算法的描述。MD5演算法的運算均為基本運算,比較容易實現且速度很快。
安全散列函數(SHA)
演算法
SHA是美國NIST和NSA共同設計的安全散列演算法(Secure Hash Algorithm),用於數字簽名標准DSS(Digital Signature Standard)。SHA的修改版SHA–1於1995年作為美國聯邦信息處理標准公告(FIPS PUB 180–1)發布[2]。
⑶ 除了柵欄密碼,愷撒密碼和維吉尼亞密碼,還有哪些密碼
培根密碼
弗朗西斯·培根,英國人,他是第一個意識到科學技術能夠改變世界面貌的哲學家。他不僅意識到這一點,而且積極投入到科學技術的探索中。他對密碼學的興趣很濃,設計出的密碼也豐富了密碼學的內容。
他設計的密碼非常獨特,它可以不加過多的「雕飾」,幾乎以本來的「素麵」在你眼前晃過,而不會引起你的注意。
培根所用的密碼是一種本質上用二進制數設計的。不過,他沒有用通常的0和1來表示,而是採用a和b。下面是他設計的26個英文字母二進製表示法。
A aaaaa
B aaaab
C aaaba
D aaabb
E aabaa
F aabab
G aabba
H aabbb
I abaaa
J abaab
K ababa
L ababb
M abbaa
N abbab
O abbba
P abbbb
Q baaaa
R baaab
S baaba
T baabb
U babaa
V babab
W babba
X babbb
Y bbaaa
Z bbaab
編寫密碼時,把密文每五個字母為一組,凡是其中的正體字母代表a,斜體字母代表b。隨意選取句子或文章,就可以通過改變字母的寫法來加密了。
此外,還有
字母表順序-數字
進制轉換密碼
Mod演算法
倒序
間隔
字母頻率
凱撒密碼(Caesar Shifts, Simple Shift)
凱撒移位(中文版)
柵欄密碼(The Rail-Fence Cipher)
維吉尼亞密碼(Vigenère Cipher)
Polybius密碼(Polybius Cipher)
ADFGX/ADFGVX密碼(ADFGX/ADFGVX Cipher)
ADFGX
ADFGVX
乘法密碼(Multiplication Cipher)
仿射密碼(Affine Shift)
希爾密碼(Hill Cipher)
加密
解密
Playfair密碼(Playfair Cipher)
摩斯電碼
置換密碼(Transposition Cipher)
替代密碼(Monoalphabetic Substitution)
字母表數字
字母表代碼
反字母表
隨機亂序字母
棋盤密碼
鍵盤密碼
鍵盤移位
軟鍵盤密碼
數字小鍵盤密碼
手機鍵盤密碼
數字諧音密碼
數字記憶編碼
網路/Google/網頁字元
網路字元(GB2312)
Google字元(URI)
網頁編碼(Unicode)
Alt+數字小鍵盤
MD5
超字數不一一解釋了。可以網路。
⑷ 求密文(凱撒密碼)
已知凱撒密碼的計算公式為 f(a)=(a+k) mod n,設k=3,n=26,明文P=COMPUTERSYSTEM,求密文。解:明文字母代碼表如下如下:由於k=3,對於明文P=COMPUTERSYSTEMf(C)=(2+3) mod 26=5=Ff(O)=(14+3) mod 26=17=Rf(M)=(12+3) mod 26=15=Pf(P)=(15+3) mod 26=18=Sf(U)=(20+3) mod 26=23=Xf(T)=(19+3) mod 26=22=Wf(E)=(4+3) mod 26=7=Hf(R)=(17+3) mod 26=20=Uf(S)=(18+3) mod 26=21=Vf(Y)=(24+3) mod 26=1=Bf(S)=(18+3) mod 26=21=Vf(T)=(19+3) mod 26=22=Wf(E)=(4+3) mod 26=7=Hf(M)=(12+3) mod 26=15=P所以密文C=Ek(P)=FRPSXWHUVBVWHP
⑸ 替代密碼的替代密碼的分類
根據密碼演算法加解密時使用替換表多少的不同,替代密碼又可分為單表替代密碼和多表替代密碼。
單表替代密碼的密碼演算法加解密時使用一個固定的替換表。單表替代密碼又可分為一般單表替代密碼、移位密碼、仿射密碼、密鑰短語密碼。
多表替代密碼的密碼演算法加解密時使用多個替換表。 多表替代密碼有弗吉尼亞密碼、希爾(Hill)密碼、一次一密鑰密碼、Playfair密碼。 單表替代密碼對明文中的所有字母都使用一個固定的映射(明文字母表到密文字母表)。設A={a0, a1,…, an-1}為包含了n個字母的明文字母表;
B={b0, b1,…, bn-1} 為包含n個字母的密文字母表,單表替代密碼使用了A到B的映射關系:f:A→B, f ( ai )= bj
一般情況下,f 是一一映射,以保證加密的可逆性。加密變換過程就是將明文中的每一個字母替換為密文字母表的一個字母。而單表替代密碼的密鑰就是映射f或密文字母表。經常密文字母表與明文字母表的字元集是相同的,這時的密鑰就是映射f。下面給出幾種典型的單表替代密碼。
⒈一般單表替代密碼
一般單表替代密碼的原理是以26個英文字母集合上的一個置換π為密鑰,對明文消息中的每個字母依次進行變換。可描述為:明文空間M和密文空間C都是26個英文字母的集合,密鑰空間K={π:Z26→Z26|π是置換},是所有可能置換的集合。
對任意π∈K,定義:
加密變換:eπ(m)=π(m)=c
解密變換:dπ(c) = π-1(c)=m, π-1是π的逆置換。
例:設置換π的對應關系如下:
a b c d e f g h i j k l m n o p q r s t u v w x y z
q w e r t y u i o p a s d f g h j k l z x c v b n m
試用單表替代密碼以π為密鑰對明文消息message加密,然後寫出逆置換 ,並對密文解密。
解:以π為密鑰用單表替代密碼對明文消息message加密,所得
密文消息為: π(m) π(e) π(s) π(s) π(a) π(g) π(e)=dtllqut
一般單表替代密碼演算法特點:
▲密鑰空間K很大,|K|=26!=4×10^26 ,破譯者窮舉搜索計算不可行,1微秒試一個密鑰,遍歷全部密鑰需要1013 年。
▲移位密碼體制是替換密碼體制的一個特例,它僅含26個置換做為密鑰空間。
密鑰π不便記憶。
▲針對一般替換密碼密鑰π不便記憶的問題,又衍生出了各種形式單表替代密碼。
⒉移位密碼
明文空間M、密文空間C都是和密鑰空間K滿足,即把26個英文字母與整數0,1,2,…,25一一對應。
加密變換,E={E:Z26→Z26, Ek (m) = m + k (mod26)| m∈M, k∈K }
解密變換,D={D:Z26→Z26, Dk (c) = c-k (mod26)| c∈C, k∈K }
解密後再把Z26中的元素轉換英文字母。
顯然,移位密碼是前面一般單表替代密碼的一個特例。當移位密碼的 密鑰k=3時,就是歷史上著名的凱撒密碼(Caesar)。根據其加密函數特 點,移位密碼也稱為加法密碼。
⒊仿射密碼
仿射密碼也是一般單表替代密碼的一個特例,是一種線性變換。仿射密碼的明文空間和密文空間與移位密碼相同,但密鑰空間為 K={(k1,k2)| k1,k2∈Z26,gcd(k1,26)=1}
對任意m∈M,c∈C,k = (k1,k2)∈K,定義加密變換為 c = Ek (m) = k1 m +k2 (mod 26)
相應解密變換為: m = Dk (c) = k1 (c-k2) (mod 26)
其中,K1 k1=1mod26 。很明顯,k1=1時即為移位密碼,而k2=1則稱為乘法密碼。
⒋密鑰短語密碼
選用一個英文短語或單詞串作為密鑰,去掉其中重復的字母得到一個無重復字母的字元串,然後再將字母表中的其它字母依次寫於此字母串後,就可構造出一個字母替代表。當選擇上面的密鑰進行加密時,若明文為「china」,則密文為「yfgmk」。顯然,不同的密鑰可以得到不同的替換表,對於明文為英文單詞或短語的情況時,密鑰短語密碼最多可能有26!=4×1026個不同的替換表。 單表替代密碼表現出明文中單字母出現的頻率分布與密文中相同, 多表替代密碼使用從明文字母到密文字母的多個映射來隱藏單字母出現 的頻率分布,每個映射是簡單替代密碼中的一對一映射多表替代密碼將 明文字母劃分為長度相同的消息單元,稱為明文分組,對明文成組地進 行替代,同一個字母有不同的密文,改變了單表替代密碼中密文的唯一 性,使密碼分析更加困難。
多表替代密碼的特點是使用了兩個或兩個以上的替代表。著名的維吉尼亞密碼和Hill密碼等均是多表替代密碼。
⒈維吉尼亞密碼
維吉尼亞密碼是最古老而且最著名的多表替代密碼體制之一,與位移密碼體制相似,但維吉尼亞密碼的密鑰是動態周期變化的。
該密碼體制有一個參數n。在加解密時,同樣把英文字母映射為0-25的數字再進行運算,並按n個字母一組進行變換。明文空間、密文空間及密鑰空間都是長度為n的英文字母串的集合,因此可表示
加密變換定義如下:
設密鑰 k=(k1,k2,…,kn), 明文m=(m1,m2,…,mn), 加密變換為:
Ek(m)=(c1,c2,…,cn),
其中ci(mi + ki)(mod26),i =1,2,…,n
對密文 c=(c1,c2,…,cn), 解密變換為:
Dk(c)=(m1,m2,…,mn), 其中 mi=(ci -ki)(mod26),i =1,2,…,n
⒉希爾(Hill)密碼
Hill密碼演算法的基本思想是將n個明文字母通過線性變換,將它們轉換為n個密文字母。解密只需做一次逆變換即可。
⒊一次一密密碼(One Time Pad)
若替代碼的密鑰是一個隨機且不重復的字元序列,這種密碼則稱為一次一密密碼,因為它的密鑰只使用一次。該密碼體制是美國電話電報公司的Joseph Mauborgne在1917年為電報通信設計的一種密碼,所以又稱為Vernam密碼。Vernam密碼在對明文加密,前首先將明文編碼為(0,1)序列,然後再進行加密變換。
設m=(m1 m2 m3 … mi …)為明文,k=(k1 k2 k3 … ki …)為密鑰,其中mi,ki ∈(0,1), i≥1, 則加密變換為: c=(c1 c2 c3 … ci …) ,其中ci = mi Å ki , i≥1,
這里為模2加法(或異或運算)
解密變換為:
m=(m1 m2 m3 … mi …) ,其中mi = ci Å ki , i≥1,
在應用Vernam密碼時,如果對不同的明文使用不同的隨機密鑰,這時Vernam密碼為一次一密密碼。由於每一密鑰序列都是等概率隨機產生的,敵手沒有任何信息用來對密文進行密碼分析。香農(Claude Shannon)從資訊理論的角度證明了這種密碼體制在理論上是不可破譯的。但如果重復使用同一個密鑰加密不同的明文,則這時的Vernam密碼就較為容易破譯。
若敵手獲得了一個密文c=(c1 c2 c3 … ci …) 和對應明文m=(m1 m2 m3 … mi …) 時,就很容易得出密鑰 k=(k1 k2 k3 … ki …) ,其中ki = ciÅ mi,i≥1。 故若重復使用密鑰,該密碼體制就很不安全。
實際上Vernam密碼屬於序列密碼,加密解密方法都使用模2加,這使軟
硬體實現都非常簡單。但是,這種密碼體制雖然理論上是不可破譯的,然而
在實際應用中,真正的一次一密系統卻受到很大的限制,其主要原因在於該
密碼體制要求:
① 密鑰是真正的隨機序列;
② 密鑰長度大於等於明文長度;
③ 每個密鑰只用一次(一次一密)。
這樣,分發和存儲這樣的隨機密鑰序列,並確保密鑰的安全都是很因難
的;另外,如何生成真正的隨機序列也是一個現實問題。因此,人們轉而尋
求實際上不對攻破的密碼系統。
⒋Playfair密碼
Playfair密碼是一種著名的雙字母單表替代密碼,實際上Playfair密碼屬於一種多字母替代密碼,它將明文中的雙字母作為一個單元對待,並將這些單元轉換為密文字母組合。替代時基於一個5×5的字母矩陣。字母矩陣構造方法同密鑰短語密碼類似,即選用一個英文短語或單詞串作為密鑰,去掉其中重復的字母得到一個無重復字母的字元串,然後再將字母表中剩下的字母依次從左到右、從上往下填入矩陣中,字母I,j占同一個位置。
⑹ 傳統的加密方法有哪些
本文只是概述幾種簡單的傳統加密演算法,沒有DES,沒有RSA,沒有想像中的高端大氣上檔次的東東。。。但是都是很傳統很經典的一些演算法
首先,提到加密,比如加密一段文字,讓其不可讀,一般人首先會想到的是將其中的各個字元用其他一些特定的字元代替,比如,講所有的A用C來表示,所有的C用E表示等等…其中早的代替演算法就是由Julius Caesar發明的Caesar,它是用字母表中每個字母的之後的第三個字母來代替其本身的(C=E(3,p)=(p+3) mod 26),但是,這種加密方式,很容易可以用窮舉演算法來破解,畢竟只有25種可能的情況..
為了改進上訴演算法,增加其破解的難度,我們不用簡單的有序的替代方式,我們讓替代無序化,用其中字母表的一個置換(置換:有限元素的集合S的置換就是S的所有元素的有序排列,且每個元素就出現一次,如S={a,b}其置換就只有兩種:ab,ba),這樣的話,就有26!種方式,大大的增加了破解的難度,但是這個世界聰明人太多,雖然26!很多,但是語言本身有一定的特性,每個字母在語言中出現的相對頻率可以統計出來的,這樣子,只要密文有了一定數量,就可以從統計學的角度,得到准確的字母匹配了。
上面的演算法我們稱之為單表代替,其實單表代替密碼之所以較容易被攻破,因為它帶有原始字母使用頻率的一些統計學特徵。有兩種主要的方法可以減少代替密碼里明文結構在密文中的殘留度,一種是對明文中的多個字母一起加密,另一種是採用多表代替密碼。
先說多字母代替吧,最著名的就是playfair密碼,它把明文中的雙字母音節作為一個單元並將其轉換成密文的雙字母音節,它是一個基於由密鑰詞構成的5*5的字母矩陣中的,一個例子,如密鑰為monarchy,將其從左往右從上往下填入後,將剩餘的字母依次填入剩下的空格,其中I/J填入同一個空格:
對明文加密規則如下:
1 若p1 p2在同一行,對應密文c1 c2分別是緊靠p1 p2 右端的字母。其中第一列被看做是最後一列的右方。
2 若p1 p2在同一列,對應密文c1 c2分別是緊靠p1 p2 下方的字母。其中第一行被看做是最後一行的下方。
3 若p1 p2不在同一行,不在同一列,則c1 c2是由p1 p2確定的矩形的其他兩角的字母,並且c1和p1, c2和p2同行。
4 若p1 p2相同,則插入一個事先約定的字母,比如Q 。
5 若明文字母數為奇數時,則在明文的末端添加某個事先約定的字母作為填充。
雖然相對簡單加密,安全性有所提高,但是還是保留了明文語言的大部分結構特徵,依舊可以破解出來,另一個有意思的多表代替密碼是Hill密碼,由數學家Lester Hill提出來的,其實就是利用了線性代數中的可逆矩陣,一個矩陣乘以它的逆矩陣得到單位矩陣,那麼假設我們對密文每m個字母進行加密,那麼將這m個字母在字母表中的序號寫成矩陣形式設為P(如abc,[1,2,3]),密鑰就是一個m階的矩陣K,則C=P*K mod26,,解密的時候只要將密文乘上K的逆矩陣模26就可以了。該方法大大的增加了安全性。