【Python与密码学①】凯撒密码(Caesar)
————————————————————————————————————————————
古典密码编码方法归根结底主要有两种,即置换和代换。
把明文中的字母重新排列,字母本身不变,但其位置改变了,这样编成的密码称为置换密码。最简单的置换密码是把明文中的字母顺序倒过来,然后截成固定长度的字母组作为密文。
代换密码则是将明文中的字符替代成其他字符。
而今天要讲解的凯撒密码就是“置换”
——————————————————————
——————————————————————
——————————
| 凯撒密码 |
——————————
凯撒密码的历史我就不做过多讲解了,有兴趣的可以自行百度[蜷]直接上干货
——————
[揪耳朵]应用场景
——————
通过这种方法将信息加密,使得通信过程的安全性大幅提高,比如双方进行信息传递时,如果信息被人从传递过程中拦截下来,就会给通信双方带来不可预估的损失,而如果信息被加密了,在没有密钥的情况下,拦截方将很难获知真正的信息
——————
[摸]加密原理
——————
凯撒密码通过“置换”的方式进行加密,对加密的明文(需加密的信息)按照字母表顺序进行“偏移处理”,偏移量被称为 密钥
比如“python”通过密钥为3的 凯撒加密后 就会变成“sbwkrq”,这是因为密钥为3,那么往后偏移三个单位为p→q→r→s,y→z→a→b,t→u→v→w,h→i→j→k,o→p→q→r,n→o→p→q
——————
[人呢]解密思路
——————
既然加密过程是将明文偏移得到密文,那将得到的密文 偏移回去 不就可以得到原来的明文了吗?
—————————
[捏脸]Python实现加密
—————————
既然知道了思路,那么就简单了,首先我们来看如何加密,Python脚本实现(图1):
str = input('请输入你要加密的字符串:')
num = int(input('请输入你的密钥:'))
if num>26:
num = num % 26
for i in str:
if ord(i)>122-num:
jia = ord(i)-26+num
else:
jia = ord(i)+num
print(chr(jia),end='')
输入“测试字符”试试(图2)
此时,明文是 ceshizifu
密钥是 6
加密后的密文是ikynofola
—————————
[人呢]Python实现解密
—————————
我们接着上一个例子来看,如果我们 收到了别人发给我们的一段密文 和他给我们的密钥 想要破解得到明文,那么可以这样来做(图3):
str = input('请输入你要解密的字符串:')
num = int(input('请输入解密密钥:'))
if num>26:
num = num %26
for i in str:
if ord(i)<97+num:
jie = ord(i)+26-num
else:
jie = ord(i)-num
print(chr(jie),end='')
输入上个例子得到的密文和密钥试试(图4)
此时,密文是ikynofola
密钥是6
解密后的明文是ceshizifu
——————
[冷笑话]注意
——————
上面的脚本我是按照字符对应的ASCII码来写的,所以如果字符中出现小写字母之外的字符,就会加解密出现其他有干扰性的字符,那就不能用这两个脚本进行加解密了,但也并不是说不能用Python加解密了,而是说要重新写脚本[赖皮][赖皮]
——————————————————————
——————————————————————
——————
[抓]拓展
——————
1.字符串里面有大写字母怎么办?
2.字符串里面有除字母以外的其他字符怎么办?
3.不知道密钥怎么解密?
4.如何进一步提高凯撒密码的安全保障性?
5.你们看完都不关注凡汐怎么办?[不要嘛]
————————
[点头]答案
————————
答案将在五一期间在评论区更新[点头]
———————————————————
本人菜鸡,如有不对,欢迎指正
——————
原创,未经本人允许,禁止转载[玫瑰]
http://cdn.u1.huluxia.com/g4/M03/6B/50/rBAAdmCKBjGAQwjgAAC3h0fBZzs030.pnghttp://cdn.u1.huluxia.com/g4/M03/6B/50/rBAAdmCKBjGAEXnrAADX9bIKDj0882.pnghttp://cdn.u1.huluxia.com/g4/M03/6B/50/rBAAdmCKBjKAH1JxAADJk01tC-Y019.pnghttp://cdn.u1.huluxia.com/g4/M03/6B/50/rBAAdmCKBjOAYIs0AAEfaU00yf4826.png
页:
[1]