我是一个甜甜的大橙子🍊,欢迎关注✉️!
我相信技术的力量💪
努力将所学分享给大家😎
你的点赞❤️分享🚀收藏📖就是对我最大的鼓励!
文章目录
凯撒密码的介绍
凯撒密码是已知最早、最简单的密码之一。它是一种替换密码,在这种密码中,明文中的每个字母都被“移位”到字母表中一定数量的位置。例如,移动1,A会被B取代,B会变成C,以此类推。这种方法以朱利叶斯·凯撒(Julius Caesar)的名字命名。
假设我们移位的值是
6
,掰起指头算一下,那么
a
对应的就是
g
,
b
对应
h
,
c
对应
i
等等。
加密前:i love csdn
加密后:o rubk iyjt
这样加密后看起来就像是一串无意义的字符串。
原理
通常加密和解密互为逆过程,我们知道如何加密,那么解密的方法也就清晰了,对于凯撒密码,只要我们知道“移位”的值
k
,那么就能对密文进行解密。
简化问题,我们做如下假设:
- 只考虑小写英文字母
- ‘a’ = 0 ‘b’ = 1 ‘c’ = 2 … ‘z’ = 25
其中,
word
代表被加密字母,
encrypt()
代表加密函数,
k
代表移位值,那么加密过程的数学公式为:
encrypt(word) = (word + k) mod 26
解密过程的数学公式为:
decrypt(word) = (word - k) mod 26
Python实现
ord()函数和chr()的介绍
我们要用到
ord()
和
chr()
两个函数,先看下介绍。
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
a
到
z
的编码为97-122.
ASCII码表请点击这里
Python加密
加密时,如果遇到
空格
,我们选择不加密。
s =input('请输入要加密的字符串:')
k =int(input('请输入移位值:'))
s_encrypt =''for word in s:if word ==' ':
word_encrypt =' 'else:
word_encrypt =chr((ord(word)-ord('a')+ k)%26+ord('a'))
s_encrypt += word_encrypt
print(s_encrypt)
请输入要加密的字符串:i love csdn
请输入移位值:6
o rubk iyjt
Python解密
s =input('请输入要解密的字符串:')
k =int(input('请输入移位值:'))
s_decrypt =''for word in s:if word ==' ':
word_decrypt =' 'else:
word_decrypt =chr((ord(word)-ord('a')- k)%26+ord('a'))
s_decrypt += word_decrypt
print(s_decrypt)
请输入要解密的字符串:o rubk iyjt
请输入移位值:6
i love csdn
最近我在做算法题,包括Leecode和DMOJ等平台,水平还有限,有兴趣加个好友一起交流提高。
版权归原作者 一个甜甜的大橙子 所有, 如有侵权,请联系我们删除。