Play fair密碼
【普萊菲爾密碼加密方法】
普萊菲爾密碼的編寫方法是極為簡單的,通常可以分為三個步驟,即編制密碼表、整理明文、編寫譯文,下面我們以明文:pishoupideweinasi和密鑰“culture”為例來講解。
(1) 編制密碼表
我們需要的是一個5乘5的方表,而用到的是密鑰“culture”與英文字母表:
Ⅰ整理密鑰字母C U L T U R E,去掉后面重復的字母以,得到字母串:C U L T R E;
Ⅱ用上一步得到的字母自上而下來填補5乘5方表的縱列(也可橫排),之后的空白按照相同的順序用字母表中剩余的字母依次填補完整,得到如下的方格,1
這一步需要注意的要點:整理密鑰字母時,如果出現z,則需要去除,因為在英文里z的使用頻率最低,相應的如果是德文,則需將i與j當作一個字母來看待,而法語則去掉w或k。
(2) 整理明文
我們要遵循的原則是“兩個一組”,得到是若干個兩兩成對的字母段,用到的是明文pishoupideweinasi與字母“x”:
Ⅰ將明文兩兩一組按順序排開,得到pi sh ou pi de we in as i
Ⅱ對于末尾的單個字母要加上一個“x”使之成對:pi sh ou pi de we in as ix這一步需要注意的要點:對于相連字母相同者,每個后面都需要加x,例如tomorrow,需要寫成:to mo rx rx ow
(3) 編寫密文
我們要得到的密文,當然,對于每個字母對,要嚴格遵循如下的原則:
1.如果兩個字母在同一行則要用它右鄰的字母替換,如果已在最右邊,則用該行最左邊的替換,如明文為“ce”,依據上表,應替換為“eg”;
2.如果兩個字母在同一列則要用它下邊的字母替換,如果已在最下邊,則用該行最上邊的替換,如明文為“oq”,依據上表,應替換為“pm”;
3.如果兩個字母在不同的行或列,則應在密碼表中找兩個字母使四個字母組成一個矩形,明文占據兩個頂點,需用另外兩個頂點的字母替換,如明文為“hx”,可以替換為“vj”或“jv”(本例按照橫向替換原則)。
Ⅰ按照上述原則,將明文加以編寫,得到jo gv ln jo fa bs oh ve wjⅡ將得到的字母改為大寫,并五個一組列好,得到密碼JOGVL NJOFA BSOHV EWJ
首先隨意制造一個3個3×3的Polybius方格替代密碼,包括26個英文字母和一個符號。然后寫出要加密的訊息的三維坐標。訊息和坐標四個一列排起,再順序取橫行的數字,三個一組分開,將這三個數字當成坐標,找出對應的字母,便得到密文。
7 x9 S6 f! f# a1 Z) t% H% Y
二分密碼的做法相近,和后來出現的ADFGVX密碼差不多。, x; N% u- a8 U3 w
例:加密"HELLO WORLD"
1 1 1 2 2 2 3 3 3
1 l e o n a r d v i
2 c b f g h j k m p
3 q s t u w x y z /
1 2 3 1 2 3 1 2 3
: t5 p. N/ K" N* d1 y; ]# X
然后寫出"HELLO WORLD"的每個字母的坐標,先上橫再豎再下橫# R# a4 m: P2 d! A! S% r, }
如下:, N) D* j; G6 I$ V g
H E L L O W O R L D" e9 p( k c- k& x6 q
---------------------------
2 1 1 1 1 2 1 2 1 31 _8 r% U0 \% N- U8 W Y% l1 \ F* a
2 1 1 1 1 3 1 1 1 1
2 2 1 1 3 2 3 3 1 1 v) E( C' k' Y- ]. z, W* K: Y
: |/ i$ @3 a0 s( g
將所得的表格橫著讀出,每三個數字一組5 Q$ ?* P, H$ \' G4 P
211 112 121 321 111 311 112 211 323 311
再回頭按坐標找出第一個表中對應字母,即:; ]. `5 [ n0 l+ O' R
# d" y8 ^ h! e' B
211 112 121 321 111 311 112 211 323 311
, X" V1 r4 k" t' K0 ?
N E C K L D E N P D
- a7 P. O8 W+ m
則"HELLO WORLD"的密文即為:NECKLDFNPD
將這兩個加密矩陣放在左上角和右下角,余下的兩個角放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 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 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 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
這兩個字母就是加密過的訊息。
hello world的加密結果:
he lp me ob iw an ke no bi
FY GM KY HO BX MF KK KI MD
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。約有二成的內
容都因此而暴露
元音密碼表:0 g6 P0 a' `8 ^ l
A B C D E F G H I J K L M N
1 11 12 13 2 21 22 23 3 31 32 33 34 35
O P Q R S T U V W X Y Z
4 41 42 43 44 45 5 51 52 53 54 55
'比如明文是::
When in Rome,do as the Romans do.(入鄉隨俗)
根據密碼表加密為(注意,數字之間加點):
52.23.2.35.3.35.43.4.34.2.13.4.1.44.45.2.43.4.34.1.35.44.13.4
韻母聲母密碼(原創)
1 2 3 4 5
1 b p m f d
2 t n l g k
3 h % j q x
4 zh ch sh r z
5 c s y w &
1 2 3 4 5 6
1 a o e i u v
2 ai ei ui @ ao A
3 ou iu ie ve er B
4 an en in # un C
5 ang eng ! ing ong D
莫爾斯電碼
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 --** 1 *----2 **--- 3 ***-- 4 ****- 5 *****
6 -**** 7 --*** 8 ---** 9 ----* 0 - ----
. *-*-*- ' *----* ? **--** ( -*--*- ) -*--*- @ *--*-* — -***-
。*-*-*- , --**-- : ---*** | *----* _/- -****- ? *--*-*
end ***-*- start -*-*-
培根密碼
A = aaaaa E = aabaa I/J= abaaa N = abbaa R = baaaa W = babaa
B = aaaab F = aabab K = abaab O = abbab S = baaab X = babab
C = aaaba G = aabba L = ababa P = abbba T = baaba Y = babba
D = aaabb H = aabbb M = ababb Q = abbbb U/V= baabb Z = babbb
加密規則:(1)A-M=>a,也就是說A到M的所有字母都替換成a.
N-Z=>b,也就是說N到Z的所有字母都替換成b.
(2)A-M<=a,也就是說a可以替換成A-M中的任何一個字母
N-Z<=b,也就是說a可以替換成N-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 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
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
博福特密碼是按mod q減法運算的一種周期代替密碼。即
ci+td=δi(mi+td)≡(ki-mi+td)(mod q)
所以,它和維吉尼亞密碼類似,以ki為密鑰的代替表是密文字母表為英文字母表逆序排列進行循環右移ki+1次形成的。例如,若ki=3(相當于字母D),則明文和密文的對應關系如下:
明文: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
密文:D C B A Z Y X W V U T S R Q P O N M L K J I H G F E
顯然,博福特密碼的解密變換為
mi+td≡δi(ci+td)≡(ki-ci+td)(modq)
因此,博福特密碼的解密變換與加密變換相同。按博福特密碼,以密鑰ki加密相當于按下式的維吉尼亞加密:
ci+td≡[(q-1)-mi+td](modq)
若按下式加密:
ci+td≡(mi+td-ki)(modq)
就得到變異的博福特密碼,相應代替表示將明文字母表循環右移ki次而成。由于循環右移ki次等于循環左移(q-ki)次,即式ci+td≡(mi+td-ki)(modq)等價于以(q-ki)為密鑰的維吉尼亞密碼。所以維吉尼亞密碼和變異的博福特密碼互為逆變換,若一個是加密運算,則另一個就是解密運算。
示例
例如,明文的第一個字母為D,則先在表格中找到第D列。由于密鑰的第一個字母為F,于是D列從上往下找到F。這一F對應的行號為C,因而C便是密文的第一個字母。以此類推可以得到密文。 以下便是一個密鑰為FORTIFICATION時的例子:
Defend the east wall of the castle去空格,
關鍵詞凱撒
這個加密方式是從凱撒位移衍生出來的,書中的名稱是“關鍵詞凱撒”。關鍵詞中不能有重復的字母,就算有也要把重復的字母刪去。
舉個例子:
以code為關鍵詞:
原字母表: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
加密密碼表:c o d e f g h i j k l m n p q r s t u v w x y z a b
這種方法即用把關鍵詞寫在前面,在按關鍵詞的最后一個字母搞凱撒位移。
若以"mima"以為關鍵詞,則關鍵詞要變成"mia"(去掉第二個重復的"m"),則:
原字母表: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
加密密碼表:m i a b c d e f g h j k l n o p q r s t u v w x y z
這個例子恰好也表現出了一個巧合,即從n開始后面的加密字母和原始字母相同,這種情況下CM可以選擇換一個關鍵詞加密,或者仍用這個關鍵詞(這種情況可以迷惑CB放棄這一個正確的關鍵詞)。
確定關鍵詞做凱撒位移時,已在關鍵詞中出現的字母不可以再次出現,不然加密密碼表中字母的數目將多于原字母表。
密鑰柵欄
密鑰柵欄這個加密方式是從傳統柵欄衍生出來的。
首先是確定密鑰,密鑰的字母數即是格子的列數。將密鑰中的字母按字母表中的順序
編號即得到每一列的序號,如果相同的字母出現超過2次,先編從左到右第一個字母
的號,再編第二個,以此類推。
以happy new year為要加密的原文為例:
1.若以cipher為密鑰,則密鑰編號為145326,在“格子”上方先寫下密鑰編號(密鑰
可寫可不寫),再按傳統柵欄編碼方式“填格子”,即
1 4 5 3 2 6
h a p p y n
e w y e a r
接下來按照每一列的編號順序依次抄下每一列,即:
heyapeawpynr,編碼完成。
2.若以mima為密鑰,則密鑰編號為3241,在“格子”上方先寫下密鑰編號(密鑰可寫
可不寫),再按傳統柵欄編碼方式“填格子”,即:
3 2 4 1
h a p p
y n e w
y e a r
接下來按照每一列的編號順序依次抄下每一列,即:
pwranehyypea,編碼完成