古典密码

1.单表密码(仿射加密)

仿射加密变化是:y=ax+b

算法:

仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。

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 Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

加密:

解码:

其中:

注:在公式中如果K=1 ,b=3则为凯撒密码

仿射加密要求gcd(k,26)=1,即k与26互素。故密钥空间为12X26=312

与26互素的k的12个取值:
KK−111395217159311191571723191121523172525\begin{array}{|c|c|} \hline K&K^-1\\ \hline 1&1\\ \hline 3&9\\ \hline 5&21\\ \hline 7&15\\ \hline 9&3\\ \hline 11&19\\ \hline 15&7\\ \hline 17&23\\ \hline 19&11\\ \hline 21&5\\ \hline 23&17\\ \hline 25&25\\ \hline \end{array} K1357911151719212325​K−11921153197231151725​​

例子:

设k=(7,3) 7的逆为15,加密函数是y=7x+3(mod26),相应的解密函数是x=15(y-3)(mod26)=15y-19(mod26)。

若要加密的明文:china,首先将字母c,h,i,n,a转化为数字2,7,8,13,0;然后加密;
7×∣278130∣+∣33333∣=∣175259943∣mod26=∣1707163∣=∣RAHQD∣7\times \begin{vmatrix} 2 \\ 7\\ 8\\ 13\\ 0\\ \end{vmatrix}+ \begin{vmatrix} 3 \\ 3\\ 3\\ 3\\ 3\\ \end{vmatrix}=\begin{vmatrix} 17 \\ 52\\ 59\\ 94\\ 3\\ \end{vmatrix}mod26=\begin{vmatrix} 17 \\ 0\\ 7\\ 16\\ 3\\ \end{vmatrix}=\begin{vmatrix} R\\ A\\ H\\ Q\\ D\\ \end{vmatrix} 7×∣∣∣∣∣∣∣∣∣∣​278130​∣∣∣∣∣∣∣∣∣∣​+∣∣∣∣∣∣∣∣∣∣​33333​∣∣∣∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣∣∣∣​175259943​∣∣∣∣∣∣∣∣∣∣​mod26=∣∣∣∣∣∣∣∣∣∣​1707163​∣∣∣∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣∣∣∣​RAHQD​∣∣∣∣∣∣∣∣∣∣​
即在当前密钥下,china经过仿射加密变化为RAHQD

解码:
15×∣1707163∣−∣1919191919∣=∣236−198622126∣mod26=∣278130∣=∣CHINA∣15\times \begin{vmatrix} 17 \\ 0\\ 7\\ 16\\ 3\\ \end{vmatrix}- \begin{vmatrix} 19\\ 19\\ 19\\ 19\\ 19\\ \end{vmatrix}=\begin{vmatrix} 236 \\ -19\\ 86\\ 221\\ 26\\ \end{vmatrix}mod26=\begin{vmatrix} 2 \\ 7\\ 8\\ 13\\ 0\\ \end{vmatrix}=\begin{vmatrix} C\\ H\\ I\\ N\\ A\\ \end{vmatrix} 15×∣∣∣∣∣∣∣∣∣∣​1707163​∣∣∣∣∣∣∣∣∣∣​−∣∣∣∣∣∣∣∣∣∣​1919191919​∣∣∣∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣∣∣∣​236−198622126​∣∣∣∣∣∣∣∣∣∣​mod26=∣∣∣∣∣∣∣∣∣∣​278130​∣∣∣∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣∣∣∣​CHINA​∣∣∣∣∣∣∣∣∣∣​
可见,原始消息china以及恢复

验证:

2.vigenere密码(维吉尼亚密码)

维吉尼亚密码是一种简单的多表代换密码。在这里,我们假设数字0-25代表按字母顺序排列的英语字母,即从a到z ,并且Key字符串的字母也以相同的方式考虑

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 Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

加密过程:

  • 反复重复键串的字母(即密钥),直到其长度等于要加密的长度为止。

    例如:
    要加密的文本abcdef密钥bcbcbc\begin{array}{|ccccccc|} \hline 要加密的文本&a&b&c&d&e&f\\ \hline 密钥&b&c&b&c&b&c\\ \hline \end{array} 要加密的文本密钥​ab​bc​cb​dc​eb​fc​​

  • 因此加密算法为

解码过程:

  • 算法为

例子:

要加密内容为 a b c d e f

密钥为b c

加密过程:

对应的加密文本与密钥
要加密的文本abcdef密钥bcbcbc\begin{array}{|ccccccc|} \hline 要加密的文本&a&b&c&d&e&f\\ \hline 密钥&b&c&b&c&b&c\\ \hline \end{array} 要加密的文本密钥​ab​bc​cb​dc​eb​fc​​

c[a,b]=(a+b)mod26=(0+1)mod26=1=b

加密后是:b d d f f h

解密过程:
要解密的密文bddffh密钥bcbcbc\begin{array}{|ccccccc|} \hline 要解密的密文&b&d&d&f&f&h\\ \hline 密钥&b&c&b&c&b&c\\ \hline \end{array} 要解密的密文密钥​bb​dc​db​fc​fb​hc​​

p[b,b]=(b-b)mod26=0mod26=0=a

验证:

3.playfair密码(普莱费尔密码)

Playfair加密算法是先将明文按两个字母一组进行分组,然后在矩阵中找对应的密文。

1.建立密钥

Playfair算法基于一个5*5的字母矩阵,该矩阵使用一个关键词构造,方法是按从左到右、从上到下顺序,填入关键词的字母(去除重复字母)后,将字母表其作余字母填入。

例如:

取密文的规则如下:

  1. 若明文出现相同字母在一组,则在重复的明文字母中插入一个填充字母(eg:X)进行分隔后重新分组(eg: balloon被重新分组为ba lX lo on)

  2. 若分组到最后一组时只有一个字母,则补充字母X

  3. 若明文字母在矩阵中同行,则循环取其右边下一个字母为密文(矩阵最右边的下一个是最左边的第一个)(eg: ar被加密为RM)

  4. 若明文字母在矩阵中同列,则循环取其下边下一个字母为密文(矩阵最下边的下一个是最上边的第一个)(eg: mu被加密为CM)

  5. 若明文字母在矩阵中不同行不同列,则取其同行且与同组另一字母同列的字母为密文(eg: hs被加密为BP,ea被加密为IM或JM)

    例子:

    明文为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

    用软件后的结果:

解码规则:

  1. 若明文字母在矩阵中同行,则循环取其左边下一个字母为密文(矩阵最左边的下一个是最右边的最后一个)(eg: RM被解码为ar)

  2. 若明文字母在矩阵中同列,则循环取其上边上一个字母为密文(矩阵最上边的上一个是最下边的最后一个)(eg: CM被解码为mu)

  3. 若明文字母在矩阵中不同行不同列,则取其同行且与同组另一字母同列的字母为密文(eg: BP被解码为hs,IM或JM被解码为ea)

4.one-time pad 一次一密 (按位异或,支持中英文各类字符)

前面三种古典密码,他们共通的弱点都是语言中字母频率的不等,导致密钥加密后密文中字母出现概率依旧不等,从而发现突破口。导致可以出现泄露。

而一次性密码本,则是使用了与明文等长的密文,使得所有字母的使用概率相等,密文完全不揭示任何明文信息,使得任何唯密文攻击无效。

算法原理:

C:密文 E:加密操作 D:解密操作 m:明文  k:密钥C = E( k, m) = k ⊕ mD = ( k, c) = k ⊕ c


这里是base64加密后的。

古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)相关推荐

  1. 如何计算维吉尼亚密码?Java实现维吉尼亚密码的加密解密算法

    文章目录 如何计算维吉尼亚密码? Java实现加密算法 Java实现解密算法 参考博客 如何计算维吉尼亚密码? 计算维吉尼亚密码有2种方式,一种是根据密码表查找,另一种是手动计算方法. 1.密码表查找 ...

  2. 密码学(二):古典密码之维吉尼亚密码的破解

    维吉尼亚密码的破解 一.引言   上一章我们介绍了维吉尼亚密码的原理,是通过移位替换的加密方法进行加密,但是因为概率论的出现这种简单的移位或替换就容易破解了,其原理很简单,英文中字母出现的频率是不一样 ...

  3. 密码学笔记——维吉尼亚密码

    维吉尼亚密码 一.简介 维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 二.加密算法 直接拿例子来说,比如我要加密一段明文        明文:THISISTO ...

  4. 维吉尼亚密码原理图解

    维吉尼亚密码引入了"密钥"的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计.假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密: TO BE ...

  5. 维吉尼亚密码加解密与破解

    实验目的 1.进一步理解维吉尼亚密码的加解密原理 2.进一步理解维吉尼亚密码的缺陷和利用方法 3.提高编程实践能力 实验要求 1.实现维吉尼亚加解密函数 2.破解维吉尼亚加密的密文 实验步骤 1.维吉 ...

  6. 密码学——维吉尼亚密码

    文章目录 前言 一.维吉尼亚密码简介 二.维吉尼亚算法 1.加密算法 2.解密算法 3.主函数 总结 前言 本内容为博主学习维吉尼亚密码的笔记,如有错误,烦请指正. 一.维吉尼亚密码简介 维吉尼亚密码 ...

  7. 维吉尼亚密码破解(Python完整详细源码)

    维吉尼亚密码破解(Python完整详细源码) 欢迎大家访问我的GitHub博客 https://lunan0320.github.io/ 文章目录 维吉尼亚密码破解(Python完整详细源码) 1.写 ...

  8. 古典密码之维吉尼亚密码实验

    学习目标: 维吉尼亚密码是古典密码中非常具有代表的例子.本实验要求用高级语言编写和调试一个简单的维吉尼亚密码实现及解密程序,通过本实验可以加深理解维吉尼亚密码原理. 预备知识: 人们在单一恺撒密码的基 ...

  9. python 古典密码第一弹(凯撒密码,Playfair密码,维吉尼亚密码)

    各位白嫖-漂亮大哥哥姐姐们好,在下菜鸡一枚,主要想在这和大家一起探讨学习之道,一起愉快的学习密码学基础.总所周知,密码学学的好,头发掉的少... 直接进入正题,今天我就主要讲三个密码,而且都是古典密码 ...

最新文章

  1. 那些让我唏嘘不已的嫡亲同学
  2. 做了个小界面,mark一下
  3. linux cpuspeed irqbalance 进程 cpu占用过高
  4. SpringMvc 事务的注解配置、实现、挂起
  5. solr4.6本地数据提交异常
  6. 安卓系统上的远程 JS 调试 Remote JavaScript Debugging on Android
  7. SQL Server2016 新功能之SQL安装篇
  8. 我的世界服务器自定义怪物怎么用,我的世界怪物属性自定义教程 怪物属性代码一览...
  9. 读《构建之法》第四,十七章有感
  10. unity 打开项目路径无效_unity3d建立的文件有中文路径,现在新建了项目打不开了...
  11. Linux定时函数介绍
  12. [UE4]关于分支Sequence和条件分支的组合用法
  13. Django 简易实现用户保持登录状态2月
  14. Windows服务器远程桌面访问(两种方法)
  15. 如何开发自己的股票软件102
  16. backdrop-filter
  17. slider wpf 垂直_继续聊WPF——Slider控件
  18. php正则匹配是否为url地址,php正则匹配网址-正则php-php正则匹配url地址
  19. Fairplay流程
  20. 【游戏面包屑】简单的导航栏设计

热门文章

  1. i5 9400f参数 i5 9400f性能怎么样
  2. 一文看懂:光学行业 三摄+潜望式+3D
  3. k8s集群reset恢复重置
  4. react+antd实现图片上传并且剪裁(请参照最新文章,此案例有bug)
  5. maya腿的蒙皮旋转枢轴_python Maya烘焙枢轴
  6. 【软技能:代码之外的生存指南】
  7. 关于AntMotion动画使用
  8. 部署cirros_vm2 和second_local_net - 每天5分钟玩转 OpenStack(131
  9. 已解决Visit python.org to download an earlier version of Python.
  10. 论文阅读笔记:vTPM