一、周期置换密码
周期置换密码是将明文字符串P按固定的长度m进行分组,然后对每组字符串中的字符按照某个密钥重新排位的到密文C。其中密钥S包含分组长度信息。解密时只需得到密钥S的逆置换,把密文重新分组,按照密钥的逆置换对密文的子字符串重新排位就可以得到明文P。
例子:
1、 明文:“State Key Laboratory of Networking and Switching”;
2、加密的密钥:S=(1 5 6 2 3);
3、将明文分为七组,每组6个字符,不足6个的用双方规定好的字符进行填充,比如空格。
P’ = (StateK)(eyLabo)(ratory)(ofNetw)(orking)(andSwi)(tching)
4、对每组的字符进行加密,根据密钥S,可知将第1个字符放在第5个字符的位置,第5个字符放在第6个字符的位置,第6个字符放在第2个字符的位置,第2个字符放在第3个字符的位置,第3个字符放在第1个字符的位置,置换后P'如下:
P‘ = (aKttSe)(Loyaeb)(tyaorr)(Nwfeot)(kgrion)(dinSaw)(hgcitn)
所以得到的最终密文Pm = "aKttSeLoyaebtyaorrNwfeotkgriondinSawhgcitn"。
5、周期置换的解密方法就是加密的逆运算,只需求出密钥的逆置换即可。可以知道密钥S=(1 5 6 2 3)的逆置换S’ = (1 3 2 6 5),所以只需将密文重新分组,通过S'的置换顺序就可以得出明文P。
二、多表代换密码(Playfair)
1、Playfair的密钥矩阵构造:
将明文字符按两个字符为一组分成若干个单元,然后将这些单元替换为密文字符组合,替换时基于一个5X5字符矩阵,该矩阵使用一个密钥来构造,方法如下:从左到右,从上到下一次填入关键词的字母,若关键词中有重复字母,则第二次出现是跳过。若密钥以全部填完,则剩下的位置有字母表中剩下的字母按照顺序一次填入矩阵,其中字母 i 和 j 看做是同一个字符。同时约定表中的第一列是第五列的右边一列,第一行是第五行的下一行。
2、加密方法:
(1) 若密文中的两个字符在密钥矩阵中是在同一行,则明文对应的密文字符是紧靠右端的字符;
(2) 若在同一列,则对应的密文是紧靠下端的字符;
(3) 若不在同一行,也不在同一列,则对应的密文是以对角顶点确定的矩形的另外的两个顶点字母,按同行的原则对应。
(4) 若明文字符数为奇数,则明文的末端添加一个事先约定好的字符进行填充,比如空格。
3、解密方法:
Playfair的界面方法和加密方法相似,只是将加密过程中的右改成左,下改成上即可。
例子:
(1) 设密钥S = “PLAYFAIR IS A DIGRAM CIPHER”;
(2) 密钥矩阵:
(3) 设明文P = “play fair cipher”,将P进行分组,每两个一组,则得到P' = “pl ay fa ir ci ph er”;
(4) 通过加密算法,可得密文M = “LA YF PY RS MR AM CD”;
(5) 补充说明加密方法的第(3)点,在密文P'中,有一组密文“ci”,可以知道c和i在密钥矩阵中不在同一行,也不在同一列,则以c和i为顶点形成一个2X2的矩阵,得到该新矩阵另外两个顶点R和M,则R为i的密文,M为C的密文。
相关推荐
这是一个完整的传统加密思想,替换密码(Playfair密码)的算法实现(基于java开发环境)
Playfair 密码将明文中的双字母组合作为一个单元对待,并将这些单元转换为密文双字母组合。 对playfair密码进行加密的算法
用的是VC++6.0编的 直接复制代码即可运行 代码通俗易懂,但不够简洁 希望大家看完后多多指导指导
这是一段c语言实现的playfair多码代换算法的简单程序。
Playfair密码的加解密算法,运行环境VC6
是我自己写的C语言算法,可以实现playfair加解密。 需要后续文档什么的可以找我,免费。 不过其实代码里面的注释完全可以帮助大家看懂了
在密码学中,密码(英语:cipher,或cypher),是一种用于执行加密或解密的算法——一系列可以作为一个过程来遵循的定义明确的步骤。另一个不太常见的术语是加密(encipherment)。加密或编码(encode)的目的是将...
playfair算法源代码及实验报告,这个是我本人上密码实验课的实验,实验报告是我本人亲自撰写的哦!
这是playfair密码算法的加密和解密程序代码,里面有完整可运行的程序。
包括:Kaiser密码 Vigenere密码 置换密码 替代密码 单表置换 Vernam,Playfair 密码分析学
古典密码,Matlab的源码,可直接运行。会者自知。
这是本人密码学的课程设计,其内容是Beaufort古典多表密码的加密解密。 源程序需要plainText.txt文件,请自行将要加密的数据贴到该文件中,作为明文,然后将该文件与源程序文件放在同一目录下。明文尽量长一些(1000...
该文件包含了playfair密码的详细实验报告,以及可以直接在DEV或VC++里面可以直接运行的代码
用C++编写的程序,可以进行古典密码的加密和解密。
用于各种古典加密,是用C语言写的,playfair hill Vigenere和仿射密码的加解密
C语言实现Playfair密码,在Windows平台的VC和Linux平台的gcc上均测试通过 C语言实现Playfair密码,在Windows平台的VC和Linux平台的gcc上均测试通过隐藏
MATLAB实现的playfair密码加解密
C语言编写的playfair密码的加密程序
用C语言实现的playfair加密算法,易懂!