微信密碼

密碼是一種用來混淆的技術,使用者希望將正常的(可識別的)信息轉變為無法識別的信息。但這種無法識別的信息部分是可以再加工並恢復和破解的。密碼在中文裏是“口令”(password)的通稱。


 

登錄網站、電子郵箱和銀行取款時輸入的“密碼”其實嚴格來講應該僅被稱作“口令”,因為它不是本來意義上的“加密代碼”,但是也可以稱為秘密的號碼。其主要限定於個別人理解(如一則電文)的符號系統。如密碼電報、密碼式打字機。

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

ECC加密法

ECC算法也是一個能同時用於加密和數字簽名的算法,也易於理解和操作。同RSA算法是一樣是非對稱密碼算法使用其中一個加密,用另一個才能解密。

公開密鑰算法總是要基於一個數學上的難題。比如RSA 依據的是:給定兩個素數p和q 很容易相乘得到n,而對n進行因式分解卻相對困難。那橢圓曲線上有什麽難題呢?

考慮如下等式 :

K=kG [其中 K,G為Ep(a,b)上的點,k為小於n(n是點G的階)的整數]

不難發現,給定k和G,根據乘法法則,計算K很容易;但給定K和G,求k就相對困難了。

這就是橢圓曲線加密算法采用的難題。我們把點G稱為基點(base point),k(k<n,n為基點G的階)稱為私有密鑰(privte key),K稱為公開密鑰(public key)。

例如我們描述一個利用橢圓曲線進行加密通信的過程:

1、用戶A選定一條橢圓曲線Ep(a,b),並取橢圓曲線上一點,作為基點G。

2、用戶A選擇一個私有密鑰k,並生成公開密鑰K=kG。

3、用戶A將Ep(a,b)和點K,G傳給用戶B。

4、用戶B接到信息後 ,將待傳輸的明文編碼到Ep(a,b)上一點M(編碼方法很多,這裏不作討論),並產生一個隨機整數r(r<n)。

5、用戶B計算點C1=M+rK,C2=rG。

6、用戶B將C1,C2傳給用戶A。

7、用戶A接到信息後,計算C1-kC2,結果就是點M。因為
C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再對點M進行解碼就可以得到明文。

ECC的功能比RSA強。而令人感興趣的是點和點的過程,這也是其功能之來源。

二方密碼

二方密碼(en:Two-square_cipher)比四方密碼用更少的矩陣。

得出加密矩陣的方法和四方密碼一樣。

例如用「example」和「keyword」作密匙,加密lp。首先找出第一個字母(L)在上方矩陣的位置,再找出第二個字母(P)在下方矩陣的位置:

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。約有二成的內容都因此而暴露。

四方密碼

四方密碼用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

這兩個字母就是加密過的訊息。

he lp me ob iw an ke no bi的加密結果:
FY GM KY HO BX MF KK KI MD

三分密碼

首先隨意制造一個3個3×3的Polybius方格替代密碼,包括26個英文字母和一個符號。然後寫出要加密的訊息的三維坐標。訊息和坐標四個一列排起,再順序取橫行的數字,三個一組分開,將這三個數字當成坐標,找出對應的字母,便得到密文。 [1]
仿射密碼

仿射密碼是一種替換密碼。它是一個字母對一個字母的。

它的加密函數是e(x)=ax+b(mod m),其中 a和m互質。

m是字母的數目。

譯碼函數是d(x)=a^(x-b)(mod m),其中a^是a在M群的乘法逆元。

波雷費密碼

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),使當時的密碼破譯師必須重新找到新方法破譯。

埃特巴什碼

埃特巴什碼是一個系統:最後一個字母代表第一個字母,倒數第二個字母代表第二個字母。

在羅馬字母表中,它是這樣出現的:

常文: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年,它就被抄經人用來寫作《耶利米書》耶利米是活動在公元前627-前586年間的猶太先知,聖經舊約書中有許多關於他的記載。在他離世前,猶太領土已被巴比倫人占領。它也是希伯來文所用的數種密碼系統之一。

白金特、雷伊和林肯在《彌賽亞的遺產》中寫道,熊斐特博士於《艾賽尼派的奧德賽》一書中描述他如何對聖殿騎士們崇拜的鮑芙默神癡迷,又如何用埃特巴什碼分析這個詞。令他驚奇的是,破譯出的詞“Sophia”為希臘語中的“智慧”。

在希伯來語中,“Baphomet”一詞拼寫如下——要記住,希伯來語句必須從右向左讀:

〔 taf 〕 〔 mem 〕 〔 vav 〕 〔 pe 〕 〔 bet 〕

將埃特巴什碼用於上述字母,熊斐特博士得到如下結果:

〔 alef 〕 〔 yud 〕 〔 pe 〕 〔 vav 〕 〔 shin 〕

即為用希伯來語從右向左書寫的希臘詞“Sophia”。

Sophia的詞義不僅限於“智慧”。它還是一位女神的名字——這位女神照說應該是上帝的新娘。許多人相信,聖殿騎士們崇拜這位女神。作者引用的是諾斯替學派的神話:“不可知解”的至尊上帝,“源化”出最早的幾位亞神,最後一位就是索菲亞——“智慧”。她極求得到對上帝“神質”的“真知”——她名字第二意義的來源,而這種不合神性的欲望“孕生”了邪神,即創造宇宙的另一位“上帝”。諾斯替派將他等同於舊約中的上帝,來解釋亞當夏娃墮降塵間和大洪水的事件。

聖殿騎士們通曉埃特巴什碼的事實,強烈表明有些來自一個拿撒勒教派的人置身於聖殿騎士中間。

丹·布朗關於英語是“最純潔的”語言的觀念可能是空想的,但並不是什麽新理論。萊納堡附近有個叫做萊納浴泉的村莊,那裏的神父亨利·布德寫過一本名為《真實的凱爾特語》的書,也聲稱英語是一種神聖的語言,或許在“巴比倫塔”用方舟拯救人類的諾亞,有一支後代在巴比魯尼亞定居。他們在史納爾平原建造高塔,試圖攀登天界。惱怒的上帝分化了在此之前統一使用的語言,而交流不通引發的混亂和爭執使人前功盡棄。墮毀前就已得到使用。據說,這本書從字面上是不能理解的,它是用密碼寫成的,傳達一個不同的信息。我們還應該記住,與其他的一些歐洲語言一樣,英語的許多詞匯源於拉丁。正如翠茜·特威曼在《達戈貝特復仇記》雜誌中指出的那樣,英語因為有26個字母,可以完美地用於埃特巴什碼。其他歐洲語言所用的字母則不成偶數。此外,她始終認為郇山隱修會偏愛英語

柵欄加密法

柵欄加密法是一種比較簡單快捷的加密方法。柵欄加密法就是把要被加密的文件按照一上一下的寫法寫出來,再把第二行的文字排列到第一行的後面。

相應的,破譯方法就是把文字從中間分開,分成2行,然後插入。

柵欄加密法一般配合其他方法進行加密。

例:
加密information
分行
i f r a i n
n o m t o
合並
ifrainnomto
完成。

針孔加密法

這種加密法誕生於近代。由於當時郵費很貴,但是寄送報紙則花費很少。於是人們便在報紙上用針在需要的字下面刺一個孔,等到寄到收信人手裏,收信人再把刺有孔的文字依次排列,連成文章。

人們已經很少使用這種加密了。

豬圈加密法

它的英文名是pigpen cipher。

在18世紀時,Freemasons為了使讓其他的人看不懂他所寫而發明的,豬圈密碼屬於替換密碼流,但它不是用一個字母替代另一個字母,而是用一個符號來代替一個字母, 把26個字母寫進下四個表格中,然後加密時用這個字母所挨著表格的那部分來代替。

對稱加密算法

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

3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高(塊加密法);

RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快(流加密法);

IDEA(International Data Encryption Algorithm)國際數據加密算法,使用 128 位密鑰提供非常強的安全性(塊加密法);
AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高, AES 標準的一個實現是 Rijndael 算法(塊加密法);

BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快,而經過改進後就是TWOFISH,AES的候選者之一(塊加密法)。

非對稱加密法

RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的(公匙加密法);DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準)。

消息摘要算法

MD5、SHA1

其他加密方法

替換加密法:用一個字符替換另一個字符的加密方法。

換位加密法:重新排列明文中的字母位置的加密法。

回轉輪加密法:一種多碼加密法,它是用多個回轉輪,每個回轉輪實現單碼加密。這些回轉輪可以組合在一起,在每個字母加密後產生一種新的替換模式。

多碼加密法:一種加密法,其替換形式是:可以用多個字母來替換明文中的一個字母。
夾帶法:通過隱藏消息的存在來隱藏消息的方法。

其它算法,如XOR、CA (流加密法)、MD5、SHA1、(流加密法)ElGamal、Diffie-Hellman、新型橢圓曲線算法ECC(數字簽名、公匙加密法)等。

密碼可運用於電腦裏的文件保護,防止泄漏個人信息。