Playfair密码仅用了25个英文字母,双字母组合为25* 25=625种,破译难度相对较低,但不适合汉字信息文件加密。基于以上情况,我们提出了扩展的Playfair密码,将双字母组合改为双字节组合,以适应汉字信息文件和一般二进制信息文件的加密。

一、Playfair密码

Playfair密码的算法是基于使用一个5*5字母矩阵,该矩阵使用一个关键词构造。设关键词是ruonarehy。矩阵的构造方法是:从左到右、从上到下填入关键词的字母(去除重复字
母),然后再以字母表顺序下将余下的字母填入矩阵剩余空间。字母I和J被看作一个字母,如下表所示。

中文信息文件加密如何通过扩展Playfair密码实现
Playfair密码系统根据下列规则一次对明文文件的两个字母加密:

1、相同对中的重复明文字母将用一个填充字母如X进行分隔,因此单词bklloon将破分隔为hi lx lo on。

2、属于该矩阵相同行的明文字母将由其右边的字母代替,而行的最后一个字母由行的第一个字母代替。例如,ar被加密为RM。

3、属于该矩阵相同列的明文字母将由其下面的字母代替,而列的最后一个字母由列的第一个字母代替。例如,mu被加密为CM。

4、否则,明文的其他字母将由与其同行,且与另一个字母同列的字母所代替。因此,hs被加密为BP,ud被加密为CZ。

二、扩展Playfair密码——Eplayfair密码

由于Playfair密码系统的明文和密文仅包含25个英文字母,因此不能用于加密中文信息文件和一般二进制信息文件。为了使Playfair密码能够用于中文信息文件和一般二进制信息文件加密,将Playfair密码系统的5*5矩阵扩展为16*16矩阵,矩阵的每个方格中放置一个字节,放置的顺序随关键词的不同而不同。

矩阵的构造方法是:从左到右、从上到下填入关键词的字节(去除重复字节),然后再以字节顺序将余下的字节填入矩阵剩余空问。把经过扩展的Playfair密码称为Eplayfair密码。

EPlavfair密码系统根据下列规则一次对明文文件的两个字母加密:相同对中的重复明文文件字节将用一个填充字节进行分隔,填充字节可自由选取,例如关键词的第一个字节;属于该矩阵相同行的明文字节将由其右边的字节代替,而行的最后一个字节由行的第一个字节代替;属于该矩阵相同列的明文文件字节将由其下面的字节代替,而列的最后一个字节由列的第一个字节代替;否则,明文文件的其它字节将由与其同行,且与另一个字节同列的字节所代替。

EPlayfair密码系统根据下列规则—次对密文文件的两个字节解密:属于该矩阵相同行的密文文件字节将由其左边的字节代替,而行的第一个字节由行的最后一个字节代替;属于该矩阵相同列的密文文件字节将由其上面的字节代替,而列的第一个字节由列的最后一个字节代替;否则,密文文件的其它字节是由与其同行,且与另一个字节同列的字节所代替;密文文件的两个字节解密成明文后,若第二个字节与填充字节相同,且第一个字节与下一对明文的第一字节相同,则去掉填充字节。

Eplayffur密码与Playfair密码相比有了很大的进步:

第一、EPlayfair密码的双字节组合有256*256=65536种,而Playfair密码只有25*25=625种双字母组合,因此识别双字节组合要困难得多;

第二,在一般的二进制文件中,各字节出现的机会均等,所以,EPlayfair完全屏蔽了字母的频率分布;

第三,Epliyfair密码适合于中文信息文件和一般二进制信息文件加密。

EPlayfair密码是一种易于实现且执行速度非常快的密码系统,尤其适于对大容量的中文信息文件或二进制信息文件加密。为了进一步加大破译难度,可对EPlayfair密码系统进行适当的改
变,例如,选择不同的重复填充字节;改变矩阵相同行或相同列字节的替换方法等。

三、中文信息文件加密如何通过扩展Playfair密码实现

1、根据关键测填充EPlayfair矩阵

repch=KeyWord. c_Str( )[0];//重复明文的填充字节

for (int i =0;i<KeVWord. Length();i++)

{

//在矩阵中填入关键词

ch=KeyWord. c_Str( )[i];

if(i>0)

{

if(memchr( pftab, ch, index)==NULL)

pftab[0]}[index++]=ch;

}

else pftab[0][index++]=ch;

}

fpr(inti=0;i<256;i++)=ch;

//用余下的宇节填入剩余的矩阵空间

ch=i;

if(memchr (pftab; ch* index)==NULL)

pftab[0][index++]=ch;

}

2、EPlayfair加密过程

设明文字节对在矩阵中的行列号分别为(y1, x1)和(y2,x2), Eplayfair密码的加密过程:

ch =buf[0];

pos1=(char* );memchr( pftab[0], ch, 256) - pftab[0];

ch=buf[1];

pos2=(char*);memchr( pftab[0],ch,256)-pftab[0];

x1= pos1; x2=pos2%;

y1=pos1/16; y2 = pos2/16;

if(y1==y2)

if ( x1==15) ;buf [0] = pftab[y1 ][o];

else buf [0 ] =pftab[y1] _[x1+1];

if(x2==15) ;buf[o]=pftab[y2][o];

else buf [0]= pftab[y2] _[x2+1];

}

if(x1==x2)

if(y1==15)_buf [0] = pftab[0][x1];

else buf [0]= pftab[y1+1 ] _[x1];

if(y2==15)_buf [0] = pftab[0][x2];

else buf [0]= pftab[y2+1 ] _[x2];

}

else{

buf[0]=pftab[y1],[x2]

buf[1]=pftab[y2],[x1]

}

3. FPlayfair解密过程

解密为加密的逆过程。

小知识之Playfair密码

Playfair密码出现于1854年,它将明文中的双字母组合作为一个单元对待,该加密法是基于一个关键词的,该关键词填写在一个5*5的矩阵中(去出重复字母和字母j),通过该矩阵完成对明文文件加密和密文文件解密过程。