三种古典密码的认识(置换密码,代换密码和轮换密码)
密码学之古典密码
- 古典密码
- 置换密码(又称为换位密码)
- 代换密码(又称为替代密码)
- 轮换密码
古典密码
从远古到1949年香农发表《保密系统的通信理论》,这期间人类所使用的密码均称为古典密码,本文主要介绍三种古典密码,分别为置换密码,代换密码和轮换密码。
置换密码(又称为换位密码)
是指明文中各字符的位置次序重新排列得到密文的一种密码体制。
特点:保持明=文中所有的字符不变,只是利用置换打乱明文字符的位置和次序
置换定义:有限集X上的运算σ:X→X,σ是一个双射函数,那么称σ为一个置换。
即任意x∈X,存在唯一的x’∈X,使得σ(x)=x’
解密的时候会用到逆置换σ’,
即任意x’∈X,存在唯一的x∈X,使得σ’(x’)=x且·满足σσ’=I
例题:(仅仅是想说明一下置换的写法以及怎么样用对换的乘积进行表示
对置换有了一个基本的认识之后我们来谈一下置换密码,置换密码有两种,一种为列置换密码,一种为周期置换密码
列置换密码
列置换密码,顾名思义,按列换位并且按列读出明文序列得到密文,具体加密步骤如下
1)将明文p以固定分组长度m按行写出nxm阶矩阵(若不m倍数,空余部分空格·补充)
2)按(1,2,3…m)的置换σ交换列的位置,σ为密钥
3)把新得到的矩阵按列的顺序依次读出得到密文c
解密过程如下
1)将密文c以固定的长度n按列写成nxm阶矩阵
2)按逆矩阵σ’交换列的位置
3)把矩阵按着行依次读出为明文
周期置换
周期变换密码是将明文P按固定长度m分组,然后对每组的字符串按置换σ重新排列位置从而得到密文
周期排列与列排列思想是一致的,只不过列排列是以矩阵的形式整列换位置,而周期是在分组以后对每组分别变换。懂得列排列就可以很容易地理解周期排列。
代换密码(又称为替代密码)
就是讲明文中的每个字符替代成密文中的另一个字符,替代后的各个字母保持原来的位置,在对密文进行逆替换就可以恢复出明文。
代换密码有分为单表代换密码和多表代换密码
单表代换密码我们分别介绍凯撒密码和仿射密码
凯撒密码
凯撒密码依据凯撒密码代换表对26个英文字母进行替换
凯撒密码代换表
由凯撒密码代换表可以看做英文字母表循环左移3位得到的,因此凯撒密码也称为移位密码
仿射密码(我觉得是这一章最难理解的一部分)
将26个小写字母分别对应(m=0,1,2,3,4…25)
加密变换:c=Ea,b(m)=(am+b) mod26
[理解:c=(am+b)%26]
解密变换:m=Da,b(m)=a^(-1)(c-b)mod26
其中 a,b是密钥,且满足a>=0,b>=25 gcd(a,26)=1的整数
gcd(a,26)为最大公因数,gcd(a,26)=1表示a,26为素数
a^(-1)为a的逆元
a^(-1)a=1mod26
逆元这个问题时数论中提出来的,很复杂的问题,我查阅了很多的资料大体理解他是怎么回事,可是还是有点囫囵吞枣,这里我说一下我的理解,有理解不对的地方请指正
a^(-1)a=1modm
aa^(-1)modm=1
ax+mr=1 其中r=gcd(a,m)
逆元问题等价于求解x的过程,一般有三种方法:费马小定理,扩展欧几里得算法,和线性筛,这里关于数论我就不展开了说明了,
在这里我附上了求解逆元的扩欧c++``程序
#include<cstdio>
#include<cstring> int exgcd(int a,int b,int &x,int &y) //功能为求AX+BY=C AB的最大公约数 ,这里默认为互为素数 ,一定存在为前提
{if(b==0){x=1;y=0;return a ;}int r=exgcd(b,a%b,y,x);y-=(a/b)*x;/return r ;
}
int main()
{int a,n,x,y;scanf("%d%d",&a,&n);exgcd(a,n,x,y); //这里算出来的X为负,因为求逆元中间符号为负,AX+BY=C 为正,结果x为负 x=(x%n+n)%n ; //把负的转化为正的 //这里还可以直接写成 x=x+n;
// x=(x+p)%p;printf("%d",x) ; //return x;
}
运算结果如上图,求m=26,a=7的逆元,结果为15,正确
多表代换密码是指依次对明文的各组信息使用无限多的或者有限个周期重复的固定代换表进行替换来得到密文,这里介绍两种多表代换密码
维尔尼亚密码
维尔尼亚密码通过使用多个字母代换表,达到同一个字母在不同位置会被替换成不同密文的效果,方法是用一个密钥选择使用哪个字母代换表,依次使用多个字母表,当密钥的字母使用结束的时候,在从头排列
加密步骤:
1)明文数字化,把明文放第一行,数字化后值放对应明文的下面第二行
2)密钥数字化,找出密钥对应的数值(a→0,b→1,…z→25 一一对应)
周期性的放在第三行
3)按着密钥的个数分组,用明文的数值与密钥的数值分别进行模26求和结果放在第四行
4)把第四行的结果找出相对应的字母为第五行,也就是我们所求的密文。
解密过程与加密过程相似,只不过是把密文当成第一行,第四行为2.3行模26差的结果
为了方便理解,找了书上的一道例题
Playfair密码
Playfair密码是将明文按着两个字母一组分成若干个单元,然后将这些单元替换成了密文字母组合,替换时基于一个5X5字母矩阵,矩阵构造方法
把密钥中的字母从左到右,从上到下依次填入5X5矩阵中,如果有重复的则忽略,IJ看做一个字符,占用一个空格,同时规定表中第一列看做第五列的右边一列,第一行可以看做第五行的下一行(闭合面),其余部分按着字母顺序表依次填充(每个字母仅出现一次)
根据每对明文p1,p2,加密时根据位置分别进行如下处理
- 若p1 p2在同一行,对应密文分别是紧靠p1 p2 右端的字母。其中第一列被看做是最后一列的右方。
- 若p1 p2在同一列,对应密文分别是紧靠p1 p2 下方的字母。其中第一行被看做是最后一行的下方。
- 若p1 p2不在同一行,不在同一列,则是由p1 p2确定的矩形的另外两个顶点字母,按同行的原则对应
- 如p1,p2相同,则插入一个事先约好的字母,并用上述方法处理
- 若明文的字母数为奇数,则在明文末端添加一个事先约好的字母进行填充
解密过程和加密过程相似,只不过是把右边改成左边,下面改成上面
轮换密码
Enigame机器(我感觉就是电台。。。)
发送者用Enigame对明文加密,将生成的密文通过无线电发给接收者,接受者用自己的Enigame解密,从而得到明文。
加密过程:
1)设置Enigame,发送者按着每日密码设置Enigame
2)加密通信密码。发送者想出三个字母将其加密,这三个字母称为通信密码,需要在 Enigame上输入两次该密码,6个字母,记录其所对应的密文
3)重新设置Enigame。发送者根据通信密码重新设置Enigame
4)加密信息
5)拼接,发送者将通信密码的密文和加密后的信息进行拼接
注意:每日密码是加密通信密码的,即加密密钥的密钥。通信密码是加密信息的
解密过程:
1)分解。把密文分解成两部分,开头的6个字母和其他
2)设置Enigame,通过读每日密码设置Enigame,使接发两端Enigame状态相同
3)解密通信密码,通过前面6个密码判断通信过程中有没有失误
4)重新设置Enigame。根据通信密码重新设置Enigame
5)解密信息
最后分享一下我在学习的时候做的思维导图,希望对你们有所帮助。
三种古典密码的认识(置换密码,代换密码和轮换密码)相关推荐
- 如何查询计算机已连接wife的密码错误,三种方法查询已连接 WiFi 的密码,简单实用!...
因为记性差,经常忘记各种密码,比如 WiFi 密码,当有朋友问到家里的无线网密码时,你就愣住了,俩人在那边干瞪眼.为了帮助大家解决这个尴尬问题,小编现在介绍三种方法,可以查询已经连接的 WiFi 的密 ...
- 删除压缩包密码的三种方法
压缩包文件设置了密码,每次解压压缩包文件都需要输入密码才行.但是有些时候,我们不需要对压缩包设置加密了,不想要在每次解压文件的时候都要输入密码,那就需要我们将压缩包密码删除,今天和大家分享删除压缩包密 ...
- 密码学基础知识(三)古典密码
说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...
- 信息安全复习三:古典密码之设计好的密码算法
一.章节梗概 讨论以下算法,理解怎么设计好的密码算法的关键问题 1.Caesar cipher(替换密码) 2.单字母表密码(替换密码) 3.Playfair密码(多表代换密码) 4.维吉尼亚密码(多 ...
- android系统密码设置功能,手机锁屏密码怎么设置 三种安卓手机锁屏方式推荐
手机中有很多应用都是与金钱挂钩,特别是微信与支付宝等等既涉及到隐私又与财产关联,这是后手机的安全就尤为重要的,而手机的锁屏密码就是一道最基本的防护措施,那么手机锁屏密码怎么设置?来看看小编推荐的三种安 ...
- Java 判断密码是否是大小写字母、数字、特殊字符中的至少三种
Java 判断密码是否是大小写字母.数字.特殊字符中的至少三种public class CheckPassword {//数字public static final String REG_NUMBER ...
- linux su root 免密码,Ubuntu 18.04.2切换到root用户的三种方式及设置免密码操作
本文介绍在Ubuntu 18.04.2系统中切换root用户的三种方式及在Ubuntu 18.04.2系统中设置普通用户切换root用户免密码操作. Ubuntu 18.04.2系统中切换root用户 ...
- [mysql]三种方法为root账户指定密码
前言:前段时间把mysql安装后一直没管它,当时就在奇怪为什么mysql登陆不要密码,原来一直用的超用户账户登陆的(简称超级用户) 其实只怪自己太无知,之前一直用的phpbydamin进行的数据库的可 ...
- java正则校验密码 长度不少于8位且至少包含大写字母、小写字母、数字和特殊符号中的四种组合 或者 其中任意三种组合
java正则校验密码必须是包含大小写字母.数字.特殊符号的8位以上四种组合 或者 其中任意三种组合 一.排除法和详细解释 1.排除大写字母.小写字母.数字.特殊符号中1种组合.2种组合.3种组合,那么 ...
- golang: 密码中允许出现数字、大写字母、小写字母、特殊字符,但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可)
要求: 密码中允许出现数字.大写字母.小写字母.特殊字符(.@$!%*#_~?&^),但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可) package mainimport ...
最新文章
- android sqlite用户注册代码,用户名和密码登录android登录sqlite
- 编写函数求字母出现次数c语言,c语言,程序设计题,输入一个字符串,统计该字符串中the出现次数。...
- php上传预览源码,php批量上传五[带预览]-PHP源码
- java项目 异常如何解决_Java项目中常见的异常处理
- java word在线预览_java 生成word文档并且在线预览的问题
- c++中射线表示_射线与球的相交测试
- 多模态融合算法——Multimodal Compact Bilinear Pooling
- 推测用户行为 程序员分享Android开发经验
- System Center 2012 R2 CM系列之配置configuration manager防火墙设置
- cache数据库教程
- scala在线视频学习
- 淘宝APP用户行为数据分析 by 一只废鹅
- 【Matlab】矩阵
- 阿里云Anolis OS 8.4
- 解决ubuntu下外接2k显示器却无法调2k分辨率问题
- 央行根据LPR调整房贷利率,看看你的房贷算法如何变化
- 你不再需要动态网页——编辑-发布-开发分离
- Python之Datasets库安装报错的解决方法
- 苹果手机安装fiddler证书抓包https流程
- 909万本科应届生被父母催找工作,95后:“别催了,已经在卷了”
热门文章
- 服务器电源维修书籍,380G5服务器电源维修经历.pdf
- 雷霆战机的java代码_JavaSwing雷霆战机(飞机大战)源代码
- opengl 雷霆战机 2d
- java时区转换_java中的时区转换
- js文件 格式_robots文件只能放在网站根目录吗?
- 网络分层和Http协议原理
- 1467 A. Wizard of Orz
- android 锁屏代码分析,锁屏分析(Android9.0)
- Win10 如何在系统内用cmd命令查看系统详细信息
- 怎么查看电脑系统的初始安装日期