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,编码完成