。RSA算法
RSA算法是第一個能同時用於加密和數字簽名的算法,也易於理解和操作。RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA的算法涉及三個參數,n、e1、e2。
其中,n是兩個大質數p、q的積,n的二進製表示時所占用的位數,就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質(互質:兩個正整數衹有公約數1時,他們的關係叫互質);再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密鑰對。
RSA加解密的算法完全相同,設A為明文,B為密文,則:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互換使用,即:
A=B^e2 mod n;B=A^e1 mod n;
1.RSA非對稱加密的一些非常規應用 http://www.icylife.net/yunshu/show.php?id=471
2.RSA的解釋 http://hi.baidu.com/yhgzi/blog/item/55a6b6641a4a63f5f7365431.html
。四方密碼 四方密碼用4個5×5的矩陣來加密。每個矩陣都有25個字母(通常會取消Q或將I,J視作同一樣,或改進為6×6的矩陣,加入10個數字)。
首先選擇兩個英文字作密匙,例如example和keyword。對於每一個密匙,將重複出現的字母去除,即example要轉成exampl,然後將每個字母順序放入矩陣,再將餘下的字母順序放入矩陣,便得出加密矩陣。
將這兩個加密矩陣放在右上角和左下角,餘下的兩個角放a到z順序的矩陣:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y WO a b c d e
R D A BC f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
加密的步驟:
兩個字母一組地分開訊息:(例如hello world變成he ll ow or ld)
找出第一個字母在左上角矩陣的位置
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
同樣道理,找第二個字母在右下角矩陣的位置:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找右上角矩陣中,和第一個字母同行,第二個字母同列的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u NO R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找左下角矩陣中,和第一個字母同列,第二個字母同行的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
這兩個字母就是加密過的訊息。
hello world的加密結果:
he lp me ob iw an ke no bi
FY GM KY HO BX MF KK KI MD
[編輯]二方密碼 二方密碼(en:Two-square_cipher)比四方密碼用更少的矩陣。
得出加密矩陣的方法和四方密碼一樣。
例如用「example」和「keyword」作密匙,加密lp。首先找出第一個字母(L)在上方矩陣的位置,再找出第二個字母(D)在下方矩陣的位置:
E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z
K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
在上方矩陣找第一個字母同行,第二個字母同列的字母;在下方矩陣找第一個字母同列,第二個字母同行的字母,那兩個字母就是加密的結果:
E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z
K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
help me的加密結果:
he lp me
HE DL XW
這種加密法的弱點是若兩個字同列,便采用原來的字母,例如he便加密作HE。約有二成的內容都因此而暴露。
。替換加密法
用一個字符替換另一個字符的加密方法。
。換位加密法
重新排列明文中的字母位置的加密法。
。回轉輪加密法
一種多碼加密法,它是用多個回轉輪,每個回轉輪實現單碼加密。這些回轉輪可以組合在一起,在每個字母加密後産生一種新的替換模式。
。多碼加密法
一種加密法,其替換形式是:可以用多個字母來替換明文中的一個字母。
。夾帶法
通過隱藏消息的存在來隱藏消息的方法。
。Kasiski法
於19世紀由波蘭的一個軍官發現的,這種方法通過查看重複密文部分,來發現多碼密鑰的長度。
。三分密碼 首先隨意製造一個3個3×3的Polybius方格替代密碼,包括26個英文字母和一個符號。然後寫出要加密的訊息的三維坐標。訊息和坐標四個一列排起,再順序取橫行的數字,三個一組分開,將這三個數字當成坐標,找出對應的字母,便得到密文。
。仿射密碼 仿射密碼是一種替換密碼。它是一個字母對一個字母的。
它的加密函數是<math>e(x)=ax+bpmod</math>,其中
<math>a</math>和<math>m</math>互質。
<math>m</math>是字母的數目。
譯碼函數是<math>d(x)=a^(x-b)pmod</math>,其中<math>a^</math>是<math>a</math>在<math>mathbb_</math>群的乘法逆元。
。波雷費密碼 1選取一個英文字作密匙。除去重複出現的字母。將密匙的字母逐個逐個加入5×5的矩陣內,剩下的空間將未加入的英文字母依a-z的順序加入。(將Q去除,或將I和J視作同一字。)
2將要加密的訊息分成兩個一組。若組內的字母相同,將X(或Q)加到該組的第一個字母後,重新分組。若剩下一個字,也加入X字。
3在每組中,找出兩個字母在矩陣中的地方。
若兩個字母不同行也不同列,在矩陣中找出另外兩個字母,使這四個字母成為一個長方形的四個角。
若兩個字母同行,取這兩個字母右方的字母(若字母在最右方則取最左方的字母)。
若兩個字母同列,取這兩個字母下方的字母(若字母在最下方則取最上方的字母)。
新找到的兩個字母就是原本的兩個字母加密的結果。
。RC5
1、創建密鑰組,RC5算法加密時使用了2r+2個密鑰相關的的32位字: ,這裏r表示加密的輪數。創建這個密鑰組的過程是非常復雜的但也是直接的,首先將密鑰字節拷貝到32位字的數組L中(此時要註意處理器是little-endian順序還是big-endian順序),如果需要,最後一個字可以用零填充。然後利用綫性同餘發生器模2初始化數組S:
對於i=1到2(r+1)-1: (本應模 ,本文中令w=32)
其中對於16位字32位分組的RC5,P=0xb7e1 Q=0x9e37
對於32位字和64位分組的RC5,P=0xb7e15163 Q=0x9e3779b9
對於64位字和128位分組,P=0xb7151628aed2a6b Q=0x9e3779b97f4a7c15
最後將L與S混合,混合過程如下:
i=j=0
A=B=0
處理3n次(這裏n是2(r+1)和c中的最大值,其中c表示輸入的密鑰字的個數)
2、加密處理,在創建完密鑰組後開始進行對明文的加密,加密時,首先將明文分組劃分為兩個32位字:A和B(在假設處理器字節順序是little-endian、w=32的情況下,第一個明文字節進入A的最低字節,第四個明文字節進入A的最高字節,第五個明文字節進入B的最低字節,以此類推),其中操作符<<<表示循環左移,加運算是模 (本應模 ,本文中令w=32)的。
輸出的密文是在寄存器A和B中的內容
3、解密處理,解密也是很容易的,把密文分組劃分為兩個字:A和B(存儲方式和加密一樣),這裏符合>>>是循環右移,減運算也是模 (本應模 ,本文中令w=32)的。
。ADFGVX密碼 假設我們需要發送明文訊息 "Attack at once", 用一套秘密混雜的字母表填滿 Polybius 方格,像是這樣:
A D F G X
A b t a l p
D d h o z k
F q f v s n
G g j c u x
X m r e w y
i 和 j 視為同個字,使字母數量符合 5 × 5 格。之所以選擇這五個字母,是因為它們譯成摩斯密碼時不容易混淆,可以降低傳輸錯誤的機率。使用這個方格,找出明文字母在這個方格的位置,再以那個字母所在的欄名稱和列名稱代替這個字母。可將該訊息可以轉換成處理過的分解形式。
A T T A C K A T O N C E
AF AD AD AF GF DX AF AD DF FX GF XF
下一步,利用一個移位鑰匙加密。假設鑰匙字是「CARGO」,將之寫在新格子的第一列。再將上一階段的密碼文一列一列寫進新方格裏。
C A R G O
_________
A F A D A
D A F G F
D X A F A
D D F F X
G F X F X
最後,按照鑰匙字字母順序「ACGOR」依次抄下該字下整行訊息,形成新密文。如下:
FAXDF ADDDG DGFFF AFAXX AFAFX
在實際應用中,移位鑰匙字通常有兩打字符那麽長,且分解鑰匙和移位鑰匙都是每天更換的。
ADFGVX
在 1918年 6月,再加入一個字 V 擴充。變成以 6 × 6 格共 36 個字符加密。這使得所有英文字母(不再將 I 和 J 視為同一個字)以及數字 0 到 9 都可混合使用。這次增改是因為以原來的加密法發送含有大量數字的簡短信息有問題。
。希爾密碼 加密
例如:密鑰矩陣
1 3
0 2
明文:HI THERE
去空格,2個字母一組,根據字母表順序換成矩陣數值如下,末尾的E為填充字元:
HI TH ER EE
8 20 5 5
9 8 18 5
HI 經過矩陣運算轉換為 IS,具體算法參考下面的說明:
|1 3| 8 e1*8+3*9=35 MOD26=9 =I
|0 2| 9 e0*8+2*9=18 MOD26=18=S
用同樣的方法把“HI THERE”轉換為密文“IS RPGJTJ”,註意明文中的兩個E分別變為密文中的G和T。
解密
解密時,必須先算出密鑰的逆矩陣,然後再根據加密的過程做逆運算。
逆矩陣算法公式:
|A B| = 1/(AD-BC) * | D -B|
|C D| |-C A|
例如密鑰矩陣=
|1 7|
|0 3|
AD-BC=1*3-0*7=3 3*X=1 mod26 所以 X=9
因此
|1 7| 的逆矩陣為: 9 * |3 -7|
|0 3| |0 1|
假設密文為“FOAOESWO”
FO AO ES WO
6 1 5 23
15 15 19 15
9* |3 -7| | 6| = 9*(3*6-7*15)=-783 mod26 = 23=W
|0 1| |15| = 9*(0*6+1*15)= 135 mod26 = 5 =E
所以密文“FOAOESWO”的明文為“WEREDONE”
。維熱納爾方陣
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
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 A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z 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
著名的維熱納爾方陣由密碼學家維熱納爾編製,大體與凱撒加密法類似。即二人相約好一個密鑰(單詞
),然後把加密後內容給對方,之後對方即可按密碼表譯出明文。
密鑰一般為一個單詞,加密時依次按照密鑰的每個字母對照明碼行加密。
例如:我的密鑰是who,要加密的內容是I love you,則加密後就是E SCRL MKB.即加密I,就從密鑰第一個字母打頭的w那行找明碼行的I對應的字母,即E。加密l,就從密鑰第2個字母打頭的h那行找明碼l對應的字母,S。加密o,從密鑰第三個字母O打頭的那行找到明碼行中o對應的字母,C。加密v,就又從密鑰第一個字母w打頭的那行找到明碼行中v對應的字母,R。 依此類推。
所以由維熱納爾方陣加密的密碼,在沒有密鑰的情況下給破譯帶來了不小的睏難。
維熱納爾方陣很完美的避開了概率算法(按每個語種中每個字母出現的概率推算。例如英語中最多的是e),使當時的密碼破譯師必須重新找到新方法破譯。
。維熱納爾方陣(維吉納正方形)衍生版本
衍生版本是將密鑰和原文轉化為數字,如:密鑰為shadow in the sky(沒有人說過密鑰衹能為一個詞),原文為Alpha six,please bomb area CA.Over.
將他們轉化為數字便是
密鑰:1908010415230914200805191125
原文:01121608011909241612050119050215130201180501030115220518
將密鑰連續不斷地寫在原文上,如下:
19080104152309142008051911251908010415230914200805191125
01121608011909241612050119050215130201180501030115220518
再將上下兩行相加(若相加後的數大於10,則忽略十位,在原位寫下個位數字),如下:
密碼數:10101702163208383610001020201113140616310415230910311633
若要讀出密碼,則將密碼數減去密鑰(若相減後的數小於0,則先加上10,再相減)即可,如下:
密碼數:10101702163208383610001020201113140616310415230910311633
密鑰:19080104152309142008051911251908010415230914200805191125
原文:01121608011909241612050119050215130201180501030115220518
再譯成英語即可。
此方法可以適用任何表音文字(英、俄、日、法語等),而且他不僅傳承了維吉納正方形的所有優點(幾乎不被破譯,避開概率統計),而且它還有編寫容易的特點(你一定不喜歡整天捧着個正方形表來編碼吧)
。柵欄加密法
柵欄加密法是一種比較簡單快捷的加密方法。柵欄加密法就是把要被加密的文件按照一上一下的寫法寫出來,再把第二行的文字排列到第一行的後面。
相應的,破譯方法就是把文字從中間分開,分成2行,然後插入。
柵欄加密法一般配合其他方法進行加密。
例:
加密information
分行
i f r a i n
n o m t o
合併
ifrainnomto
完成~
。埃特巴什碼
埃特巴什碼是一個係統:最後一個字母代表第一個字母,倒數第二個字母代表第二個字母。
在羅馬字母表中,它是這樣出現的:
常文: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
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
這種密碼是由熊斐特博士發現的。熊斐特博士為庫姆蘭《死海古捲》的最初研究者之一,他在《聖經》歷史研究方面最有名氣的著作是《逾越節的陰謀》。他運用這種密碼來研究別人利用其他方法不能破解的那些經文。這種密碼被運用在公元1世紀的艾賽尼/薩多吉/拿撒勒教派的經文中,用以隱藏姓名。其實早在公元前500年,它就被抄經人用來寫作《耶利米書》〔1〕耶利米是活動在公元前627-前586年間的猶太先知,聖經舊約書中有許多關於他的記載。在他離世前,猶太領土已被巴比倫人占領。〔1〕。它也是希伯來文所用的數種密碼係統之一。
白金特、雷伊和林肯在《彌賽亞的遺産》中寫道,熊斐特博士於《艾賽尼派的奧德賽》一書中描述他如何對聖殿騎士們崇拜的鮑芙默神癡迷,又如何用埃特巴什碼分析這個詞。令他驚奇的是,破譯出的詞“Sophia”為希臘語中的“智慧”。
在希伯來語中,“Baphomet”一詞拼寫如下——要記住,希伯來語句必須從右嚮左讀:
〔 taf 〕 〔 mem 〕 〔 vav 〕 〔 pe 〕 〔 bet 〕
將埃特巴什碼用於上述字母,熊斐特博士得到如下結果:
〔 alef 〕 〔 yud 〕 〔 pe 〕 〔 vav 〕 〔 shin 〕
即為用希伯來語從右嚮左書寫的希臘詞“Sophia”。
Sophia的詞義不僅限於“智慧”。它還是一位女神的名字——這位女神照說應該是上帝的新娘。許多人相信,聖殿騎士們崇拜這位女神。〔1〕作者引用的是諾斯替學派的神話:“不可知解”的至尊上帝,“源化”出最早的幾位亞神,最後一位就是索菲亞——“智慧”。她極求得到對上帝“神質”的“真知”——她名字第二意義的來源,而這種不合神性的欲望“孕生”了邪神,即創造宇宙的另一位“上帝”。諾斯替派將他等同於舊約中的上帝,來解釋亞當夏娃墮降塵間和大洪水的事件。〔1〕
聖殿騎士們通曉埃特巴什碼的事實,強烈表明有些來自一個拿撒勒教派的人置身於聖殿騎士中間。
丹·布朗關於英語是“最純潔的”語言的觀念可能是空想的,但並不是什麽新理論。萊納堡附近有個叫做萊納浴泉的村莊,那裏的神父亨利·布德寫過一本名為《真實的凱爾特語》的書,也聲稱英語是一種神聖的語言,或許在“巴比倫塔”〔2〕用方舟拯救人類的諾亞,有一支後代在巴比魯尼亞定居。他們在史納爾平原建造高塔,試圖攀登天界。惱怒的上帝分化了在此之前統一使用的語言,而交流不通引發的混亂和爭執使人前功盡弃。〔2〕墮毀前就已得到使用。據說,這本書從字面上是不能理解的,它是用密碼寫成的,傳達一個不同的信息。我們還應該記住,與其他的一些歐洲語言一樣,英語的許多詞彙源於拉丁。正如翠茜·特威曼在《達戈貝特復仇記》雜志中指出的那樣,英語因為有26個字母,可以完美地用於埃特巴什碼。其他歐洲語言所用的字母則不成偶數。此外,她始終認為郇山隱修會偏愛英語
。針孔加密法
這種加密法誕生於近代。由於當時郵費很貴,但是寄送報紙則花費很少。於是人們便在報紙上用針在需要的字下面刺一個孔,等到寄到收信人手裏,收信人再把刺有孔的文字依次排列,連成文章。
現在已經很少使用這種加密了(我同學曾經用這種方法傳情書....囧)。
。豬筆加密法
它的英文名是pigpen cipher,直譯過來好搞笑。
在18世紀時,Freemasons為了使讓其他的人看不懂他所寫而發明的,豬筆密碼屬於替換密碼流,但它不是用一個字母替代另一個字母,而是用一個符號來代替一個字母, 把26個字母寫進下四個表格中,然後加密時用這個字母所挨着表格的那部分來代替。
n.: cipher code, (secret) code, words, letters, symbols, etc that represent others, used for secret messages or for presenting or recording information briefly, codon, Confirm Password, secret code, a telegram in code language, cipher officer, password, keyword, cypher, cryptograph, cryptogram, cipher