Fork me on GitHub

playfair

它有一些不太明显的特征:密文的字母数一定是偶数;任意两个同组的字母都不会相同,如果出现这种字符必是乱码和虚码。 编写分三步:1.编制密码表 2.整理明文 3.编写密文 构成部分:1.密钥 2.明文3.密文4.注明的某个字母代替的另一个字母。

加密

编制密码表

第一步是编制密码表。在这个5*5的密码表中,共有5行5列字母。第一列(或第一行)是密钥,其余按照字母顺序。密钥是一个单词或词组,若有重复字母,可将后面重复的字母去掉。当然也要把使用频率最少的字母去掉。如:密钥是Live and learn,去掉后则为liveandr。如果密钥过长可占用第二列或行。

如密钥crazy dog,可编制成

C

D

F

M

T

R

O

H

N

U

A

G

I ( J )

P

V

Z

B

K

Q

W

Y

E

L

S

X

整理明文

第二步整理明文。将明文每两个字母组成一对。如果成对后有两个相同字母紧挨或最后一个字母是单个的,就插入一个字母X(或者Q)。

如,communist,应成为co,mx,mu,ni,st。

编写密文

最后编写密文。对明文加密规则如下:

1 若p1 p2在同一行,对应密文c1 c2分别是紧靠p1 p2 右端的字母。其中第一列被看做是最后一列的右方。如,按照前表,ct对应dc

2 若p1 p2在同一列,对应密文c1 c2分别是紧靠p1 p2 下方的字母。其中第一行被看做是最后一行的下方。

3 若p1 p2不在同一行,不在同一列,则c1 c2是由p1 p2确定的矩形的其他两角的字母(至于横向替换还是纵向替换要事先约好,或自行尝试)。如,按照前表,wh对应ku或uk。

如,依照上表,明文where there is life,there is hope.

可先整理为:WH ER ET HE RE IS LI FE TH ER EI SH OP EX

然后密文为:KU YO XD OL OY PL FK DL FU YO LG LN NG LY

将密文变成大写,然后几个字母一组排列。

如5个一组就是KUYOX DOLOY PLFKD LFUYO LGLNN GLY

解密

Playfair解密算法首先将密钥填写在一个5*5的矩阵中(去Q留Z),矩阵中其它未用到的字母按顺序填在矩阵剩余位置中,根据替换矩阵由密文得到明文。

对密文解密规则如下:

1 若c1 c2在同一行,对应明文p1 p2分别是紧靠c1 c2 左端的字母。其中最后一列被看做是第一列的左方。

2 若c1 c2在同一列,对应明文p1 p2分别是紧靠c1 c2 上方的字母。其中最后一行被看做是第一行的上方。

3 若c1 c2不在同一行,不在同一列,则p1 p2是由c1 c2确定的矩形的其他两角的字母。

其实就是反其道而行之。

练习

一: 密钥:boys and girls are students ( 按行填充密钥, 不在同一行的明文字母, 行不变列变)

密文 GUUID BCYXN YOETK RUGAB EMBCE TDICQ LDHYB JRMRD IRCV

明文(原文):It is not a problem. It is a challenge. Enjoy facing it.

二:密钥:father ( 按行填充密钥, 不在同一行的明文字母, 行变列不变)

密文:OPHEN UMRFP EFPVI DLRGQ NRRNW RHKNR SVNYF HSVFI IJRQP AFK

明文(原文):Nothing in the world is difficult, if you set your mind to it.