古典密码:_Playfair_Cipher

合集下载

古典密码-普莱菲尔密码Playfair

古典密码-普莱菲尔密码Playfair

古典密码-普莱菲尔密码Playfair本⽂⽬的在于整合了⽹上的Playfair Cipher原理、解密及算法实现⼤部分均为转载,可以链接到原⽂地址查看,这⾥只是整合⽂章简介以下直接搬运原⽂,便于查看,也可以直接链接到原⽂地址查看ctf-wiki-PlayfairPlayfair 密码(Playfair cipher or Playfair square)是⼀种替换密码,1854 年由英国⼈查尔斯 · 惠斯通(Charles Wheatstone)发明,基本算法如下:选取⼀串英⽂字母,除去重复出现的字母,将剩下的字母逐个逐个加⼊ 5 × 5 的矩阵内,剩下的空间由未加⼊的英⽂字母依 a-z 的顺序加⼊。

注意,将 q 去除,或将 i 和 j 视作同⼀字。

将要加密的明⽂分成两个⼀组。

若组内的字母相同,将 X(或 Q)加到该组的第⼀个字母后,重新分组。

若剩下⼀个字,也加⼊ X 。

在每组中,找出两个字母在矩阵中的地⽅。

若两个字母不同⾏也不同列,在矩阵中找出另外两个字母(第⼀个字母对应⾏优先),使这四个字母成为⼀个长⽅形的四个⾓。

若两个字母同⾏,取这两个字母右⽅的字母(若字母在最右⽅则取最左⽅的字母)。

若两个字母同列,取这两个字母下⽅的字母(若字母在最下⽅则取最上⽅的字母)。

新找到的两个字母就是原本的两个字母加密的结果。

以 playfair example 为密匙,得P L A Y FI R E X MB C D G HK N O Q ST U V W Z要加密的讯息为 Hide the gold in the tree stumpHI DE TH EG OL DI NT HE TR EX ES TU MP就会得到BM OD ZB XD NA BE KU DM UI XM MO UV IF-Playfair该⽹站详细地介绍了Playfair密码,包括历史、运⽤、⽹页实现、python实现等等唯⼀的缺点就是全英Cryptanalysis of the Playfair cipher⽂章介绍了Playfair密码的破译,不过⼜是英⽂Decrypto在线⽹页CAPtfEncoder。

四种古典密码的C++实现(3)-----Playfair密码

四种古典密码的C++实现(3)-----Playfair密码

四种古典密码的C++实现(3)-----Playfair密码 1//Playfair密码2/*理解算法最重要,最好⾃⼰动⼿实现试试看,可以使⽤MFC写⼀个简单的交互界⾯*/3 #include<iostream>4 #include<cstring>56using namespace std;7void encrypt()8 {9const int N=100;10char letters[26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//⽤于填充矩阵11int flag[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//字母是否已在矩阵中,与letters数组对应12char ch[5][5];//5X5矩阵13char ch1[N];//密钥14char ch2[N];//明⽂15char ch4;//⽆关字符16int len='a'-'A';17 cout<<"输⼊密钥:";18 cin>>ch1;19int flg=1;20while(flg==1)21 {22for(int i=0;i<strlen(ch1);i++)//把所输⼊的密钥转化为⼤写字母23 {24if(ch1[i]>'z'||ch1[i]<'a')25 {26 cout<<"请重新选择操作:"<<endl;27 flg=0;break;28 }29else30 ch1[i]=ch1[i]-len;31 }32if(flg==1)33 { for(int i=0;i<strlen(ch1);i++)//把密钥中的J都变为I34 {35if(ch1[i]=='J')ch1[i]='I';36 }37int i=0;int j=0;38//把密钥中的字母填⼊到矩阵中,并把该字母标记为已⽤39for(int k=0;k<strlen(ch1);k++)40 {41for(int t=0;t<25;t++)42 {43if(ch1[k]==letters[t]&&flag[t]==0)44 {45 ch[i][j]=letters[t];46 flag[t]=1;47if(j<4)j++;48else {i++;j=0;}49 }50 }51 }52for( int k=0;k<25;k++)//按字母表顺序把未⽤字母依次填⼊到矩阵中53 {54if(flag[k]==0)55 {56 ch[i][j]=letters[k];57 flag[k]=1;58if(j<4)j++;59else{i++;j=0;}60 }61 }62 cout<<"密钥填充后的矩阵为: "<<endl;63for(i=0;i<5;i++)64for(j=0;j<5;j++)65 {66 cout<<ch[i][j];67 cout<<"";68if(j==4)69 cout<<endl;70 }71 cout<<endl;72 cout<<"请输⼊明⽂(请输⼊英⽂字符):";73 cin>>ch2;74 cout<<"输⼊⼀个⽆关字符:";75 cin>>ch4;76if(ch4>='a')77 ch4=ch4-len;78for(int k=0;k<strlen(ch2);k++)//把所输⼊的明⽂转化为⼤写字母79 {80if(ch2[k]>='a')81 ch2[k]=ch2[k]-len;82 }83for(int k=0;k<strlen(ch2);k++)//把明⽂中的J都变为I84 {85if(ch2[k]=='J')86 ch2[k]='I';87 }88//为明⽂添加必要的⽆关字符以防⽌同⼀组的两个字符相同89for( int k=0;k<strlen(ch2);k+=2)90 {91if(ch2[k]==ch2[k+1])92 {93for(int t=strlen(ch2);t>k;t--)94 ch2[t+1]=ch2[t];95 ch2[k+1]=ch4;96 }97 }98//若明⽂有奇数个字符,则添加⼀个⽆关字符以凑够偶数个99if(strlen(ch2)%2!=0)100 {101 ch2[strlen(ch2)+1]=ch2[strlen(ch2)];//字符串结尾赋'\0'102 ch2[strlen(ch2)]=ch4;//明⽂串尾插⼊⽆关字符103 }104 cout<<"经过处理后的明⽂为:";105for(int k=0;k<strlen(ch2);k+=2)106 cout<<ch2[k]<<ch2[k+1]<<"";107 cout<<endl;108 cout<<"其最终长度为:"<<strlen(ch2)<<endl;109//////////////////明⽂输⼊并整理完毕///////////////////////////////110for(int k=0;k<strlen(ch2);k+=2)111 {112int m1,m2,n1,n2;113for(m1=0;m1<=4;m1++)114 {for(n1=0;n1<=4;n1++)115 {116if(ch2[k]==ch[m1][n1])break;117 }118if(ch2[k]==ch[m1][n1])break;119 }120for(m2=0;m2<=4;m2++)121 {122for(n2=0;n2<=4;n2++)123 {124if(ch2[k+1]==ch[m2][n2])break;125 }126if(ch2[k+1]==ch[m2][n2])break;127 }128 m1=m1%5;129 m2=m2%5;130if(n1>4){n1=n1%5;m1=m1+1;}131if(n2>4){n2=n2%5;m2=m2+1;}132if(m1==m2)133 {134 ch2[k]=ch[m1][(n1+1)%5];135 ch2[k+1]=ch[m2][(n2+1)%5];136 }137else138 {139if(n1==n2)140 {141 ch2[k]=ch[(m1+1)%5][n1];142 ch2[k+1]=ch[(m2+1)%5][n2];143 }144else145 {ch2[k]=ch[m1][n2];146 ch2[k+1]=ch[m2][n1];147 }148 }149 }150 cout<<"加密后所得到的密⽂是:";151for(int k=0;k<strlen(ch2);k+=2)152 cout<<ch2[k]<<ch2[k+1]<<"";153 cout<<endl;154 }else break;155 }156157 }158159//解密算法160void decrypt()161 {162const int N=100;163char letters[26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//⽤于填充矩阵164int flag[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};165//标记字母是否已在矩阵中,与letters数组对应166char ch[5][5];//5X5矩阵167char ch1[N];//密钥168char ch2[N];//密⽂169int len='a'-'A';170int flg=1;171 cout<<"输⼊密钥:";172 cin>>ch1;173while(flg==1)174 {175for(int i=0;i<strlen(ch1);i++)//把所输⼊的密钥转化为⼤写字母176 {if(ch1[i]>'z'||ch1[i]<'a')177 {178 cout<<"请重新选择操作:"<<endl;179 flg=0;break;180 }181else182 ch1[i]=ch1[i]-len;183 }184if(flg==1)185 { for(int i=0;i<strlen(ch1);i++)//把密钥中的J都变为I186 {187if(ch1[i]=='J')ch1[i]='I';188 }189int i=0;int j=0;190//把密钥中的字母填⼊到矩阵中,并把该字母标记为已⽤191for(int k=0;k<strlen(ch1);k++)192 {193for( int t=0;t<25;t++)194 {195if(ch1[k]==letters[t]&&flag[t]==0)196 {197 ch[i][j]=letters[t];198 flag[t]=1;199if(j<4)j++;200else {i++;j=0;}201 }202 }203 }204for( int k=0;k<25;k++)//按字母表顺序把未⽤字母依次填⼊到矩阵中205 {206if(flag[k]==0)207 {208 ch[i][j]=letters[k];209 flag[k]=1;210if(j<4)j++;211else{i++;j=0;}212 }213 }214 cout<<"密钥填充后的矩阵为: "<<endl;215for(i=0;i<5;i++)216217for(j=0;j<5;j++)218 {219 cout<<ch[i][j];220 cout<<"";221if(j==4)222 cout<<endl;223 }224 cout<<endl;225/////////////////////矩阵⽣成完毕////////////////////////////226int f=0;227do{228 cout<<"请输⼊密⽂(英⽂字符):";229 cin>>ch2;230for(int k=0;k<strlen(ch2);k++)//把所输⼊的密⽂转化为⼤写字母231 {232if(ch2[k]>='a')233 ch2[k]=ch2[k]-len;234 }235for( int k=0;k<strlen(ch2);k++)//把密⽂中的J都变为I236 {237if(ch2[k]=='J')ch2[k]='I';238 }239for( int k=0;k<strlen(ch2);k+=2)240 {241if(ch2[k]==ch2[k+1])242 {243 cout<<"同⼀分组中不能出现相同字符!请重新输⼊。

信息安全-1:python之playfair密码算法详解[原创]

信息安全-1:python之playfair密码算法详解[原创]

信息安全-1:python之playfair密码算法详解[原创]转发注明出处:⼀、基本概念1. 古典密码是基于字符替换的密码。

加密技术有:Caesar(恺撒)密码、Vigenere(维吉尼尔)密码、Playfair密码、Hill密码……2. 明⽂:未经过加密的信息;密⽂:加密后的信息3. 加密解密的过程:如下图⼆、Caesar密码 这⾥我先简单讲下恺撒密码,咸觉挺简单的,后⾯再主要讲Playfair算法原理与编程。

基本原理:在开拓罗马帝国的时候,恺撒担⼼信使会阅读他送给⼠兵的命令,因此发明了对命令进⾏加密的算法--恺撒密码器恺撒密码器挺简单的:把字母表中的每个字母向前循环移动3位加密信息将字母向前移动三位解密信息将字母向后移动三位移动的位数是关键,称之为密钥加密和解密的密钥是相同的,我们称之为对称密码器数学表达恺撒密码的加密算法表⽰为:C=E(p)=(p+3) mod 26恺撒密码的解密算法表⽰为:p=D(C)=(C-3) mod 26改进的恺撒密码明⽂的发送⽅和接收⽅事先协商好⼀个密钥K(1<=K<=25),则:恺撒密码的加密算法表⽰为:C=E(p)=(p+K) mod 26恺撒密码的解密算法表⽰为:p=D(C)=(C-K) mod 26三、Playfair密码基本原理Playfair算法基于⼀个5*5的字母矩阵,该矩阵使⽤⼀个关键词构造,⽅法是按从左到右、从上到下顺序,填⼊关键词的字母(去除重复字母)后,将字母表其作余字母填⼊。

例如: 关键词取:monarchy时,字母矩阵为下图如⽰(矩阵只能放25个字母,I与J同)加密规则(重要)Playfair加密算法是先将明⽂按两个字母⼀组进⾏分组,然后在矩阵中找对应的密⽂。

取密⽂的规则如下:1. 若明⽂出现相同字母在⼀组,则在重复的明⽂字母中插⼊⼀个填充字母(eg:z)进⾏分隔后重新分组(eg: balloon被重新分组为ba lz lo on)2. 若分组到最后⼀组时只有⼀个字母,则补充字母z3. 若明⽂字母在矩阵中同⾏,则循环取其右边下⼀个字母为密⽂(矩阵最右边的下⼀个是最左边的第⼀个)(eg: ar被加密为RM)4. 若明⽂字母在矩阵中同列,则循环取其下边下⼀个字母为密⽂(矩阵最下边的下⼀个是最上边的第⼀个)(eg: mu被加密为CM)5. 若明⽂字母在矩阵中不同⾏不同列,则取其同⾏且与同组另⼀字母同列的字母为密⽂(eg: hs被加密为BP,ea被加密为IM或JM)PS:上述规则第⼀次看时挺烦的,但照着例⼦看就⼀定可以看懂的!举例(这个例⼦后⾯测试会⽤到的):明⽂为we are discovered save yourself,分组成为we ar ed is co ve re ds av ey ou rs el fz;⽤上述矩阵加密后的密⽂为:UG RM KC SX HM UF MK BT OX GC MV AT LU KV四、Playfair算法编程这⾥我不想直接贴代码。

javascript实现playfair和hill密码算法

javascript实现playfair和hill密码算法

javascript实现playfair和hill密码算法时⾄期末,补习信息安全概论作业。

恰巧遇古典密码学算法中的playfair算法和hill算法,⽤javascript语⾔实现起来是在有趣,边查百度边编码,顺便好好补习⼀下javascript基础。

playfairPlayfair密码(英⽂:Playfair cipher 或 Playfair square)是⼀种替换密码。

依据⼀个5*5的正⽅形组成的密码表来编写,表中排列有25个字母。

对于英语中的26个字母,去掉最常⽤的Z,构成密码表。

实现思路:1,编制密码表 密钥是⼀个单词或词组,密码表则根据⽤户所给出的密钥整理⽽出。

若有重复字母,可将后⾯重复的字母去掉。

 如密钥crazy dog,可编制成C O H M TR G I N UA B J P VY E K Q WD F L S X复制代码代码如下:/** 功能:编制密码表** 参数:密钥(经过去除空格和⼤写处理)** 返回:密码表*/function createKey(keychars){//字母顺序数组var allChars = ['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'];//变量keychars获取字母在字母顺序表中位置,删除该字母for(var i = 0 ;i<keychars.length;i++){var index = allChars.indexOf(keychars[i]);if (index > -1) {allChars.splice(index, 1);}}//将keychar中的字母插⼊到字母表中for(var i = keychars.length-1;i>=0;i--){allChars.unshift(keychars[i]);}//从第⼀列将keychars插⼊⾄密码表for(var i = 0 ; i<5 ; i++){for(var j = 0; j<5 ;j++){key[j][i] = allChars[i*5+j];}}}考虑将keychars插⼊到密码表时需要去除重复字符和Z,设计算法如下:复制代码代码如下:/** 功能:去除字符串中重复字母** 参数:需要进⾏处理的字符串** 返回:处理过的字符串*/function removeDuplicate(str){var result = [],tempStr = "";var arr = str.split('');//把字符串分割成数组//arr.sort();//排序for(var i = 0; i < arr.length; i++){var repeatBack = true;//设计变量是为确保字符串前部分不存在相同字符,因为以下算法只能确保连在⼀起相同的字符 for(var j = 0;j<result.length ;j++){if(arr[i] == result[j])repeatBack = false;}if(arr[i] !== tempStr && repeatBack){result.push(arr[i]);tempStr = arr[i];}else{continue;}}return result.join("");//将数组转换为字符串}2,整理明⽂ 将明⽂每两个字母组成⼀对。

古典密码算法

古典密码算法

古典密码算法古典密码算法古典密码算法是指在计算机加密领域之前使用的一些传统密码算法,它们通常基于简单的数学原理和替换规则。

以下是几种常见的古典密码算法:凯撒密码(Caesar Cipher):凯撒密码是一种替换密码,通过将字母按照一个固定的偏移量进行替换来加密消息。

例如,偏移量为3时,字母A被替换为D,字母B被替换为E,以此类推。

解密过程则是将替换后的字母反向偏移。

凯撒密码很容易破解,因为只有26种可能的偏移量。

维吉尼亚密码(Vigenère Cipher):维吉尼亚密码是一种多表密码,它使用一个关键字来决定每个字母的偏移量。

关键字被重复使用,逐个与明文中的字母对应,生成密文。

解密过程则是通过将密文与关键字对应的字母相减得到明文。

维吉尼亚密码比凯撒密码更复杂,但仍然容易受到频率分析等攻击。

替代密码(Substitution Cipher):替代密码使用替换规则来加密和解密消息。

最简单的替代密码是单字母替换,即将明文中的每个字母替换为一个固定的密文字母。

这种方法容易受到频率分析攻击。

更复杂的替代密码如多表密码和多字母替换密码引入了更复杂的替换规则,增加了密码破解的难度。

仿射密码(Affine Cipher):仿射密码是一种线性替换密码,它使用一个加密函数将明文字母映射到密文字母。

加密函数是一个仿射变换,包括一个乘法和一个加法操作。

解密过程则是应用逆仿射变换。

仿射密码比凯撒密码和替代密码更难破解,但对于较大的密钥空间来说仍然存在弱点。

这些古典密码算法在现代密码学中已经被更安全和复杂的算法所取代,因为它们容易受到密码分析的攻击。

现代密码算法,如对称加密算法(如AES)和公钥加密算法(如RSA),提供了更高的安全性和复杂性,以抵御现代密码破解技术的威胁。

古典密码:_Playfair_Cipher

古典密码:_Playfair_Cipher

密文的字母頻率越一致,越難以統計分析破解。
2012/5/31 6 6
解密算法 Decryption Algorithm
1.共用一把key 2.安全管道 3.安全的加密算法、必須假设是公开的
加密算法 Encryption Algorithm
4. 数学公式 C=EK(M), M=DK(C)
2012/5/31
3 3
Playfair加密法
3.將明文分成两个字符一组(但若一组字母相同则中间插入一个“x”) 1.挑選一個單字做為key 4.加密規則: 2.依接下來的方式将字母一一填入5×5的矩阵 5.解密規則: 若两字符在同一列,则各以上方字符取代。 若兩字元在同一列,則各以下方字元取代。 key key
2012/5/31
5 5
Playfair加密法的安全性
100 90 80
Playfair Cipher Plaintext
双字符对有 26×26=676 組的可能,也就是 說至少要有這麼多字元的密文才足以分析。 較Monoalphabetic(单表代换)加密更為 安全,第一次世界大戰中被採用。 不過密文中仍存在明文的結構,只要搜集 到字元数超过可分析的密文,仍有可能以 統計方法進行分析,進而破解密文。
l
p
q
s
t
z
ek su ul at …
e
l u
f g i/j k p q s t v w x z
u v w x
abcdefghijkl mnopqrstuvwx yz 明文:killersarerunningaway 密文:eksuulatrmkmwmagyqnxnb
2012/5/31 4 4
Playfair加密法的安全性

应用密码学习题答案3

应用密码学习题答案3

《应用密码学》习题和思考题答案第3章古典密码3-1 举例说明什么是隐写术。

答:隐写术就是隐藏消息的存在,这种方法通常在一段看来无伤大雅的文字中嵌入排列一些词汇或字母隐含地表达真正的意思。

例子略。

3-2 区别隐写术与密码编码学。

答:密码编码学是通过各种文本转换的方法使得消息为外部不可理解。

隐写术则是隐藏消息的存在,它本质上不是一种编码加密技术,这种方法通常在一段看来无伤大雅的文字中嵌入排列一些词汇或字母隐含地表达真正的意思。

隐写术的优点在于能够被某些人使用而不容易发现他们间在进行秘密通信。

而加密则很容易被发现谁与谁在进行秘密通信,这种发现本身可能具有某种意义或作用。

隐写术与加密技术相比有一些缺点:(1)它形式简单但构造费时,要求有大量的开销来隐藏相对较少的信息。

(2)一旦该系统的构造方法被发现,就会变得完全没有价值。

(3)隐写术一般无稳健性,如数据改动后隐藏的信息不能被恢复。

3-3 区别代替与换位。

答:代替就是将明文字符用另一个字符取代,代替密码操作的目的是制造混乱,使得确定消息和密钥是怎样转换成密文的尝试变得困难。

换位就是重新排列消息中的字母,以便打破密文的结构特性。

即它交换的不再是字符本身,而是字符被书写的位置。

3-4 频率分析的基本处理方法是什么?答:频率分析攻击的一般方法:第一步:对密文中出现的各个字母进行统计,找出它们各自出现的频率。

第二步:根据密文中出现的各个字母的频率,和英语字母标准频率进行对比分析,做出假设,推论加密所用的公式。

第三步:证实上述假设(如果不正确,继续作其他假设)。

3-5 使用穷举搜索法,破译如下利用代替密码加密的密文:BEEAKFYDJXUQYHYJIQRYHTYJIQFBQDUYJIIKFUHCQD解:因此,本题的解密结果应为:Look up in the air,it’s a bird, it’s a plane, it’s superman。

提示:表中最左边一列的数字表示代替变换时字母的后移位数。

《古典置换密码》课件

《古典置换密码》课件

Vigenere Cipher
总结词
一种多表替代密码,使用一个密钥字符串来决定每个字母的加密方式。
详细描述
Vigenere Cipher是一种多表替代密码,它使用一个密钥字符串来决定每个字母的加密方式。这个密 钥字符串的长度与明文相同,并且每个字母在密钥字符串中只使用一次。这种加密方法比 Polyalphabetic Cipher更加复杂,因为它使用多个不同的密钥来加密文本。
加密强度有限
古典置换密码的加密强度取决于密钥和置换表的复杂程度 ,但在当时条件下,密钥和置换表的复杂程度有限,容易 被破解。
不适合大规模数据加密
古典置换密码适用于短消息加密,不适合大规模数据的加 密,因为加密和解密过程都需要对整个数据进行置换和替 换操作,计算量大,效率较低。
06
总结与展望
总结古典置换密码的发展历程
THANK YOU
《古典置换密码》ppt课件
目录
• 古典置换密码简介 • 古典置换密码的种类 • 古典置换密码的破解方法 • 古典置换密码在现代的应用 • 古典置换密码的优缺点 • 总结与展望
01
古典置换密码简介
定义与特点
定义
古典置换密码是一种基于替换的 加密方法,通过将明文中的每个 字母替换为另一个字母或符号, 以达到隐藏信息的目的。
尽管现代密码学已经取得了很大的进展,但古典置换密码仍具有一定的
实际应用价值,值得继续研究和探索。
02
结合现代技术
随着计算机科学和数学的发展,古典置换密码可以与现代技术相结合,
开发出更加高效和安全的加密算法。
03
教育价值
古典置换密码作为密码学史上的重要组成部分,对于密码学教育具有重
要的意义,有助于学生了解密码学的发展历程和基本原理。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
又称为Conventional / Private-key / Single-key Encryption
1.共用一把key 2.安全管道(Secure Channel)
key key
K M
3.安全的加解密算法、必須假設公開的 4.以數學式子表示
K M
C 明文 Plaintext
D( ) E( )
明文 Plaintext 密文 Ciphertext
l
p
q
s
t
z
ek su ul at …
e
l u
f g i/j k p q s t v w x z
u v w x
abcdefghijkl mnopqrstuvwx yz 明文:killersarerunningaway 密文:eksuulatrmkmwmagyqnxnb
2012/5/31 4 4
Playfair加密法的安全性
代换加密: Playfair Cipher
2012/5/31
1
Playerfair Cipher教学内容
• 对称式加密(Symmetric Encryption) • Playfair加密法(Playfair Cipher) • Playfair加密法的安全性
2012/5/31
2 2
对称式加密(Symmetric Encryption)
解密算法 Decryption Algorithm
1.共用一把key 2.安全管道 3.安全的加密算法、必須假设是公开的
加密算法 Encryption Algorithm
4. 数学公式 C=EK(M), M=DK(C)
2012/5/31
3 3
Playfair加密法
3.將明文分成两个字符一组(但若一组字母相同则中间插入一个“x”) 1.挑選一個單字做為key 4.加密規則: 2.依接下來的方式将字母一一填入5×5的矩阵 5.解密規則: 若两字符在同一列,则各以上方字符取代。 若兩字元在同一列,則各以下方字元取代。 key key
monarchy 若两字符在同一行,则各以左边字符取代。 若兩字符在同一行,則各以右边字符取代。
其他情況,则换成此二字元对角的两字符。 其他情況,則換成此二字元对角的两字符。
ki lx le rs … m c
e
o h f
n
a
r
m o
n
a b
r d
y b d g i/j k
c
h y
ki lx le rs …
密文的字母頻率越一致,越難以統計分析破解。
2012/5/31 6 6源自2012/5/315 5
Playfair加密法的安全性
100 90 80
Playfair Cipher Plaintext
双字符对有 26×26=676 組的可能,也就是 說至少要有這麼多字元的密文才足以分析。 較Monoalphabetic(单表代换)加密更為 安全,第一次世界大戰中被採用。 不過密文中仍存在明文的結構,只要搜集 到字元数超过可分析的密文,仍有可能以 統計方法進行分析,進而破解密文。
m o c
明文 Plaintext
n
a
r
m o c e
密文 Ciphertext
n
a
r
明文 Plaintext
h f
y b d g i/j k
h f p
y b d g i/j k q s t z
e
l
p
q
s
t
z
l
u v w x
u v w x
解密演算法 Decryption Algorithm
加密演算法 Encryption Algorithm
Reletive Frequency of Occurrence of Letters
70 60 50 40 30
Vigenère Cipher
20 10 0 2 4 6 8 10 12 14 16 18 20 22 24 26 Frequency Ranked Letters
Random Polyalphabetic Cipher
相关文档
最新文档