凯撒密码属于古典密码学范畴,本人最近开始学习密码学,今天尝试用python编写一个凯撒密码的加密与解密函数,我觉得过程很有趣,属于暴力美学。
一、加密函数
凯撒密码的加密过程符合人们的思维习惯,即获取加密密钥之后,对数据进行移动再拼接成一个字符串,核心代码为:chr((ord(i)+key-97/65)%26+97/65)
ord() 函数在 Python 中用于获取一个字符对应的 Unicode 编码值。
chr()函数在 Python 中用于将一个整数(Unicode 编码)转换为其对应的字符。
注意:最后不要忘了把97或者65加回去哦!本人因为第一次写,一直得不到想要的结果,经过很多遍检查才发现是没有加97/65
具体代码如下:
def LockCode():
txt_ = input("请输入明文:")
cryto_key = int(input("请输入密钥:"))
txt_ = txt_.strip() # 去除空格
locked_txt = ""
for i in txt_:
if (97 <= ord(i) <= 122):
locked_txt += chr((ord(i) + cryto_key - 97) % 26 + 97)
elif (65 <= ord(i) <= 90):
locked_txt += chr((ord(i) + cryto_key - 65) % 26 + 65)
# 如果是数字,则直接连接在字符串后面
else:
locked_txt += str(i)
print(locked_txt)
二、解密函数
解密函数在主要代码体上与加密函数逻辑相同,是加密的逆向,加密是把明文往后移,解密时把密文往前移。本人额外设置了一个GoExitFlag旗帜用于控股程序循环是否继续进行,直到解出密文
话不多说,上代码!
def OpenLock():
txt_ = input("请输入密文:")
for cryto_key in range(1, 26):
GoExitFlag = input("请输入程序是否继续指令:")
unloced_txt = ""
if GoExitFlag == "1":
for i in txt_:
if (97 <= ord(i) <= 122):
unloced_txt += chr((ord(i) - cryto_key - 97) % 26 + 97)
elif (65 <= ord(i) <= 90):
unloced_txt += chr((ord(i) - cryto_key - 65) % 26 + 65)
# 如果是数字,则直接连接在字符串后面
else:
unloced_txt += str(i)
print(f"第{cryto_key}测试密码:"+unloced_txt)
else:
exit(0)
值得注意的是,凯撒代码作为古典密码学的代表,是古典密码学替代与置换思想的完美代表,虽然在现代计算机中,破解凯撒密码是一件很轻易的事,但对于刚刚入门密码学的我们,是一个学习密码学很好的例子。
好啦,本次博客到此结束!希望大家喜欢。
标签:加密,解密,txt,密码学,凯撒,97 From: https://blog.csdn.net/2303_79532367/article/details/142797956