密码学—凯撒密码Python程序

文章介绍了凯撒密码的来源及其实现原理。这是一种古典加密方法,通过对字母进行固定位数的替换实现加密。加密算法基于字母表的循环移位,而解密则通过逆向操作还原原文。代码示例展示了如何用Python实现凯撒密码的加密和解密过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

凯撒密码来源

古典密码,且属于单表加密
凯撒密码又称恺撒变换、变换加密,凯撒是当时罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。(当然只限于26个字母的加密解密)
我觉得叫带有’变换’俩字的好,因为这个算法就是将信息移动替换的过程。

加密算法

  • 凯撒密码是对单个字母加密,因此加密的时候会采用循环加密

  • 解释
    将26个字母按照横排顺序排好,然后密钥就是将26个字母向右移动的位数,这里的移动位数遵循模运算,比如原本的26个字母表中z右移一位就变成了a,原本的26个字母表中a左移一位就变成了z。
    算法就是加上加密算法和一些自己定义的细节比如全部大写或者全部小写,追求精益求精的还可以记住用户输入的内容的大小写然后根据他的内容进行加密。
    下面的代码就是不管用户是否大小写,最后出来的结果我全部转为大写了。

  • 最主要的步骤还是将其移动后的字母的数字要模26,因为凯撒的明文空间就是26个,密文空间也是26个。所以key即使你写得再大,最后在加密步骤中模26后仍旧回到26个信息空间。
    下面代码最重要一步就是 (ord(ch.upper()) - ord(‘A’) + int(key)) % p
    先让字母转为凯撒明文空间中的对应数字,然后再加上密钥移动位数再模26.

# 加密
message=input('请输入加密内容')
p = 26
key = input('请输入密钥')
# 首先将所有信息转化为大写字母, 非字母的不进入存储
for ch in message:  
	# 这里的\单纯只是将代码换行,因为太长了
   if ord('A') <= ord(ch) <= ord('Z') \
   or ord('a') <= ord(ch) <= ord('z'):
       temp_num = (ord(ch.upper()) - ord('A') + int(key)) % p
       cipher.append(temp_num)

#首先打印其Cipher数字
print(cipher)

#将其ASCII数字转化为大写字母
message=''
for i in cipher:  # 将列表转化为字符串输出
    message += chr(i + ord('A'))
    
#打印输出密文
print(message)

解密算法

  • 解释
    与加密算法反过来,转为对应凯撒明文空间中对应的数字之后用密钥数字将其左移回去再模26,在模运算的世界里不用担心出现负数,因为负数最后模出来的还在模数的范围内。
  • 注意:解密密钥必须和加密密钥相同,或者你的密钥模26后是与原密钥相同(因为模运算世界中只要超过模数的就能将其模回来对应的数字,所以即使你数字给的再大不过也是你模数的空间内)
cipher=input('请输入明文')
p = 26
key = input('请输入密钥') #密钥必须与你加密的密钥相同
# 解码
p = 26
#存放解密密文的数字
deCipher = []
for ch in cipher:
    if ord('A') <= ord(ch) <= ord('Z') or ord('a') <= ord(ch) <= ord('z'):
        temp = (ord(ch.upper()) - int(key) - ord('A')) % p
        deCipher.append(temp)

# 输出
message = ''
for i in deCipher:
    message += chr(i + ord('A')) #转为ASCII输出
#输出明文
print(message)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹等寒

谢过道友支持,在下就却之不恭了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值