密码学的基本目的是使得两个在不安全的信道上进行安全的通信,在计算机网络中,现假设有两个人Alice和Bob,Alice想发送消息给Bob,告诉他明天凌晨2点毒贩将在4号码头进行交易,请Bob配合缉毒。这里Alice有一个麻烦就是他怕在信息传输中可能会被敌人Oscar监听,甚至篡改消息内容,导致整个计划失败,Bob也对Alice发过来的消息有疑虑,不知道消息是否为Alice本人所发,消息内容是否真实等等。
这里密码学的重要性就体现出来了,假设Alice事先和Bob商量好一个密钥(key),Alice通过密钥将明文(plaintext)加密成密文,在网络中传输,Bob收到Alice传过来的密文(ciphertext),用事先商量好的密钥进行解密,得到明文,而敌人即使监听到Alice发送的消息,也是加密过的密文,由于不知道密钥,所以无法知道真实的明文,整个过程如下。
移位密码是古典密码学中最早,最简单的一种加、解密码方法,最早可追溯至古罗马时代,尤利乌斯:恺撒曾经使用过此密码。
移位密码是通过将明文中所使用的字母按照一定的字数进行“平移”来加密,为了简化内容,在这里我们只使用英文字母作为示例,我们用小写字母(a,b,c,d…)来表示明文,用大写字母(A,B,C,D…)来表示密文。
最早期时,一般将字母平移3位,也就是a->D,b->E,c->F,
这种最早时平移3位是叫恺撒密码(Caesar Cipher),后来经过推广,平移位数也不一定是3位,可以是其它任何整数位,这种又叫移位密码(Shift Cipher),可以知道,恺撒密码是移位密码的一个特例(key=3时),下面是恺撒密码平移的工作方式
使用移位密码可以用来加密普通的英文句子,但是我们要建立英文字母和模26剩余之间一一对应关系,如A->0,B->1,…Z->25。其列表如下:
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 举报,一经查实,本站将立刻删除。
扫码加微信详细咨询太和智慧养老产品和平台服务!
养老资讯
- 这些东西要常吃
- 老年人多吃蛋羹!
- 科学吃蔬菜吃出健康来
- 浅谈老年人的营养特点!
- 少吃盐多吃素能够长寿
- 常吃腐竹可预防老年痴呆!
- 治便秘食疗效果好!
- 老人强肾健体可这样吃
- 花生对于抵抗衰老有帮助
- 营养烹饪是蒸煮
- 牛奶喝太多小心前列腺癌
- 老年咳喘可多吃黑芝麻!
- 多吃醋可以长寿吗
- 吃圆白菜的七大好处
- 老年女性常吃“两花”
- 关注单身老人的膳食生活
- 关注单身老人膳食生活
- 吃猪蹄让你睡得好
- 晚餐少吃利于降血脂!
- “自找苦吃”有利养生
- 每天喝杯红酒防老年痴呆
- 要怎样吃玉米才有营养
- 老年人每天要吃够五种蔬果
- 苦瓜真能降低高血压和高血
- 高血脂患者吃蒜可降血脂!
- 老年人吃鱼油要适量!
- 老人最好不要吃粉丝
- 喝果汁不能代替吃水果!
- 老年人养生可“蜂”吃“醋
- 益生菌长寿者的肠道“定居
- 饮食中蕴藏着祛斑素
- 可助增强记忆力的食物
- 粥帮老人润肺补脾
- 减少老年斑可多吃茄子
- 老年人不宜长期喝纯净水
- 别忽视了豆芽的保健功效
- 长寿老人饮食有十大爱好
- 老人多食杂米有益身体健康
- 老人吃饺子有四注意
- 一天十颗枣,一辈子不显老
助老机构介绍
姓名:
年龄:
电话: