实现凯撒加密
凯撒加密(Ceaser Cipher)
第一种实现(加减法运算)
1. 加密
库
自定义加密规则
获取明文
程序主体
代码总汇
2. 解密
第二种实现(取模运算及零下索引)
1. 加密
2. 解密
凯撒加密(Ceaser Cipher)
在密码学中,恺撒密码或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
1. 对于凯撒密码来说,多次加密的效果与一次加密的效果类似,并没有提高加密的效果。
2.在一个凯撒密码的密码体系中,往往存在一个特别的偏移量,使用这个偏移量对明文加密两次将得到明文。
第一种实现(加减法运算)
1. 加密
库
在两种实现方式中,都需要使用到 Python 第三方库 pyperclip。
在命令行中通过 PIP 工具使用如下命令进行安装:
pip install pyperclip
自定义加密规则
# 定义凯撒加密的偏移量
OFFSET = 13
# 定义加解密过程中的所使用的字符集,密文中的字符
# 必须包含其中,否则无法正常加密
CHAR_SET = ''.join([chr(i) for i in range(32, 127)])
TypeError: sequence item 0: expected str instance, int found
上述图片引用自 菜鸟教程
获取明文
length = len(CHAR_SET)
right = length - 1
cipher_text = ''
for char in plain_text:
idx = CHAR_SET.find(char)
if idx != -1:
tmp = idx + OFFSET
# 如果索引偏移后的值比列表 CHAR_SET 的
# 最后一位元素的索引还要大,
# 那么 Python 解释器将执行循环体中的内容
while tmp > right:
tmp -= length
cipher_text += CHAR_SET[tmp]
else:
print('【程序获取到的明文不符合加密规则,
明文如下,请仔细检查后重新运行程序】')
print(plain_text)
break
pyperclip.copy(cipher)
print('【程序已将加密结果复制到了您的剪贴板,请注意查收】')
print(cipher_text)
注:
str.find(substring, beg=0, end=len(string))
find() 方法可以返回子字符串 substring 的第一个元素在 字符串 str 中第一次出现的索引位置,若 substring 不存在于 str 中,该方法将返回 -1。
str.index(substring, beg=0, end=len(string))
该方法的作用效果及使用方法与 str.find() 方法类似,唯一不同的是,在 substring 不存在与 str 中时,该方法将抛出如下错误:
# 获取明文
plain_text = pyperclip.paste()
# 定义凯撒加密的偏移量
OFFSET = 13
# 定义加解密过程中的所使用的字符集,密文中的字符
# 必须包含其中,否则无法正常加密
CHAR_SET = ''.join([chr(i) for i in range(32, 127)])
# 自定义解密规则
length = len(CHAR_SET)
right = length - 1
cipher_text = ''
for char in plain_text:
idx = CHAR_SET.find(char)
if idx != -1:
tmp = idx + OFFSET
# 如果索引偏移后的值比列表 CHAR_SET 的
# 最后一位元素的索引还要大,
# 那么 Python 解释器将执行循环体中的内容
while tmp > right:
tmp -= length
cipher_text += CHAR_SET[tmp]
else:
print('【程序获取到的明文不符合加密规则,
明文如下,请仔细检查后重新运行程序】')
print(plain_text)
break
pyperclip.copy(cipher_text)
print('【程序已将加密结果复制到了您的剪贴板,请注意查收】')
print(cipher_text)
import pyperclip
# 获取密文
cipher_text = pyperclip.paste()
# 定义凯撒加密的偏移量
OFFSET = 13
# 定义加解密过程中的所使用的字符集,密文中的字符
# 必须包含其中,否则无法正常解密
CHAR_SET = ''.join([chr(i) for i in range(32, 127)])
# 自定义解密规则
length = len(CHAR_SET)
left = 0
plain_text = ''
for char in cipher_text:
idx = CHAR_SET.find(char)
if idx != -1:
tmp = idx - OFFSET
# 如果索引偏移后的值比列表 CHAR_SET 的
# 最后一位元素的索引还要大,
# 那么 Python 解释器将执行循环体中的内容
while tmp < left:
tmp += length
plain_text += CHAR_SET[tmp]
else:
print('【程序获取到的密文不符合解密规则,
密文下,请仔细检查后重新运行程序】')
print(cipher_text)
break
pyperclip.copy(plain_text)
print('【程序已将解密结果复制到了您的剪贴板,请注意查收】')
print(plain_text)
while tmp > right:
tmp -= length
类似的操作我们往往可以使用求模运算来替代:
tmp %= length
虽然两者的底层实现都是类似的,但使用求模运算将提升程序的可读性,所以还是推荐各位尽量使用第二种。
到此这篇凯撒密码加密 算法(凯撒密码加密算法python)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/pythonbc/73044.html