登陆 | 注册 设为首页 | 加入收藏 | 联系我们
太和养老网
热词老年艺术  助老机构  养老系统  

中心区域北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 香港 澳门 台湾 全国城市养老院目录 全国县市养老院汇总目录 太和AI作品展 太和养老艺术网AI作品展示

密码学(一)之恺撒密码(移位密码)-飞

 

2023/7/6 17:08:41 ('互联网')

前言

密码学的基本目的是使得两个在不安全的信道上进行安全的通信,在计算机网络中,现假设有两个人Alice和Bob,Alice想发送消息给Bob,告诉他明天凌晨2点毒贩将在4号码头进行交易,请Bob配合缉毒。这里Alice有一个麻烦就是他怕在信息传输中可能会被敌人Oscar监听,甚至篡改消息内容,导致整个计划失败,Bob也对Alice发过来的消息有疑虑,不知道消息是否为Alice本人所发,消息内容是否真实等等。

这里密码学的重要性就体现出来了,假设Alice事先和Bob商量好一个密钥(key),Alice通过密钥将明文(plaintext)加密成密文,在网络中传输,Bob收到Alice传过来的密文(ciphertext),用事先商量好的密钥进行解密,得到明文,而敌人即使监听到Alice发送的消息,也是加密过的密文,由于不知道密钥,所以无法知道真实的明文,整个过程如下。


image.png移位密码(Shift Cipher)、恺撒密码(Caesar Cipher)

移位密码是古典密码学中最早,最简单的一种加、解密码方法,最早可追溯至古罗马时代,尤利乌斯:恺撒曾经使用过此密码。

移位密码是通过将明文中所使用的字母按照一定的字数进行“平移”来加密,为了简化内容,在这里我们只使用英文字母作为示例,我们用小写字母(a,b,c,d…)来表示明文,用大写字母(A,B,C,D…)来表示密文。

最早期时,一般将字母平移3位,也就是a->D,b->E,c->F,
这种最早时平移3位是叫恺撒密码(Caesar Cipher),后来经过推广,平移位数也不一定是3位,可以是其它任何整数位,这种又叫移位密码(Shift Cipher),可以知道,恺撒密码是移位密码的一个特例(key=3时),下面是恺撒密码平移的工作方式

image.png

移位密码的加密

使用移位密码可以用来加密普通的英文句子,但是我们要建立英文字母和模26剩余之间一一对应关系,如A->0,B->1,…Z->25。其列表如下:

image.png
现假设我们有明文P=china,密钥K=3, 现要将其加密,根据上表,将字符P中的每个字母平移3位,得到如下情况:

c->Fh->Ki->Ln->Qa->D

至此,明文china就被转换成了密文FKLQD,
具体用程序算法可归纳如下:

a,首先将明文中的字母按照上表对应成相应的数字:   2 7 8 13 0b,再将上面的数字与密钥K=3相加:   5 10 11 16 3c,再对各个数字取模26运算,可得:   5 10 11 16 3d,最后将各数字转化为字母即可得密文   F  K  L  Q  D

具体代码可参考这里
https://github.com/xuyao91/cryptography/blob/master/caesar/caesar.rb#L10

移位密码的解密

移位密码的解密也非常简单,只要使用加密时用的密钥进行反向平移操作,刚来的例子只要将密文反向平移3位就行,可得到如下:

F->cK->hL->iQ->nD->a

具体程序的算法其实就是加密的反向操作,如下:

a, 将密文转化成对应的字母    5 10 11 16 3b, 将各数字减去密钥K=3,得到如下数字    2 7 8 13 0c, 再对各个数字取模26运算,得:    2 7 8 13 0d, 最后将数字转化成字母得    c h i  n a

具体代码可参考这里:
https://github.com/xuyao91/cryptography/blob/master/caesar/caesar.rb#L18

移位密码的暴力破解

通过上面的例子可以知道,我们只要拿到的密钥K,就可以密文解密,那么有没有不用密钥就可以解密的呢,在移位密码中,密钥就是字母平移的位数,因为因为字母表里只有26个字母(0-25),所以加密的密钥一共就是0-25之间的26个数字,我们可以把26个数字全部当作密钥试一次,解密出来其中有一个明文肯定是对的。

像这种将所有可能的密钥全部尝试一遍的,我们叫暴力破解(brute-force attack),这种方法本质是在所有的密钥中找出正确的那一个,因此又称为穷举搜索(exhaustive search)。

可以将上面的例子通过暴力破解试一下,密钥从0开始,一直试到25,得到如下效果:

FKLQD -> 第0次破解 -> fklqdFKLQD -> 第1次破解 -> ejkpcFKLQD -> 第2次破解 -> dijobFKLQD -> 第3次破解 -> chinaFKLQD -> 第4次破解 -> bghmzFKLQD -> 第5次破解 -> afglyFKLQD -> 第6次破解 -> zefkxFKLQD -> 第7次破解 -> ydejwFKLQD -> 第8次破解 -> xcdivFKLQD -> 第9次破解 -> wbchuFKLQD -> 第10次破解 -> vabgtFKLQD -> 第11次破解 -> uzafsFKLQD -> 第12次破解 -> tyzerFKLQD -> 第13次破解 -> sxydqFKLQD -> 第14次破解 -> rwxcpFKLQD -> 第15次破解 -> qvwboFKLQD -> 第16次破解 -> puvanFKLQD -> 第17次破解 -> otuzmFKLQD -> 第18次破解 -> nstylFKLQD -> 第19次破解 -> mrsxkFKLQD -> 第20次破解 -> lqrwjFKLQD -> 第21次破解 -> kpqviFKLQD -> 第22次破解 -> jopuhFKLQD -> 第23次破解 -> inotgFKLQD -> 第24次破解 -> hmnsfFKLQD -> 第25次破解 -> glmre

可以知道,其实在试到第3次的时候,明文就被试出来了
代码可以参(jk是什么意思是什么?JK是“じょしこうこうせい ”(女子高校生)罗马音 jyoshi koukousei 的简写(取其中“J”和“K”),通常指日本女高中生;JK也是ACGN次文化中的萌属性之一。)考这里
https://github.com/xuyao91/cryptography/blob/master/caesar/caesar.rb#L26

脚本示例

我们用脚本试一下上面所说的各种方法,脚本代码在这里

https://github.com/xuyao91/cryptography/blob/master/caesar/caesar.rb

#明文是 I am peter, I love china, 密钥是6message = "iampeterxuilovechina"caesar = Caesar.new 6#调用encoder方法加密出密文cipher = caesar.encoder(message) => OGSVKZKXDAORUBKINOTG#调用decoder方法解密出明文caesar.decoder(cipher) => iampeterxuilovechina#暴力破解OGSVKZKXDAORUBKINOTG -> 第0次破解 -> ogsvkzkxdaorubkinotgOGSVKZKXDAORUBKINOTG -> 第1次破解 -> nfrujyjwcznqtajhmnsfOGSVKZKXDAORUBKINOTG -> 第2次破解 -> meqtixivbympsziglmreOGSVKZKXDAORUBKINOTG -> 第3次破解 -> ldpshwhuaxloryhfklqdOGSVKZKXDAORUBKINOTG -> 第4次破解 -> kcorgvgtzwknqxgejkpcOGSVKZKXDAORUBKINOTG -> 第5次破解 -> jbnqfufsyvjmpwfdijobOGSVKZKXDAORUBKINOTG -> 第6次破解 -> iampeterxuilovechinaOGSVKZKXDAORUBKINOTG -> 第7次破解 -> hzlodsdqwthknudbghmzOGSVKZKXDAORUBKINOTG -> 第8次破解 -> gykncrcpvsgjmtcafglyOGSVKZKXDAORU



扫码加微信详细咨询太和智慧养老产品和平台服务!

 

 





版权声明:

---------------------------------------------------------------


所有信息来源于互联网,本文的版权归原作者所有,不代表本网观点和立场。

本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 81480447@qq.com 举报,一经查实,本站将立刻删除。



扫码加微信详细咨询太和智慧养老产品和平台服务!

 

养老资讯
助老机构介绍
评论
已有 0 条评论

最新评论

推荐养老院

您希望养老院位于
  • 不限
  • 东城
  • 西城
  • 崇文
  • 宣武
  • 朝阳
  • 丰台
  • 石景山
  • 海淀
  • 门头沟
  • 房山
  • 通州
  • 顺义
  • 昌平
  • 大兴
  • 怀柔
  • 平谷
  • 延庆
  • 密云
您希望的价格范围
  • 不限
  • 500以下
  • 500-1000
  • 1000-2000
  • 2000-3000
  • 3000-5000
  • 5000以上
老人的情况是
  • 不限
  • 自理
  • 半自理
  • 全护理
  • 特护

姓名

年龄

电话

全国城市养老院



关于我们 | 联系方式 | 网站地图 | 友情链接

Copyright 2010-2022 京ICP备18035644号-3 北京太和 版权所有