实现该程序本人进行很多次的改进测试,终于达到了理想的预期,该程序对用户输入的字符串进行凯撒密码方案加密,用户输入的必须是数字字母的组合或者纯数字或者纯字母,其他输入均为非法输入。
凯撒密码的原理:
凯撒密码(英语:Caesar cipher),是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中所有字母都在字母表向后(或向前)按照固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将替换成D、B变成E,以此类推,X被替换为A, Y被替换为B, Z被替换为C,数字同理。(如下图)
该程序代码:
'''
编写程序,利用“凯撒密码”方案,实现对用户输入文字的加密操作。
凯撒密码(英语:Caesar cipher),是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中所有字母都在字母
表向后(或向前)按照固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将替换成D、B变成E,以此类推。
'''
while True:
user_letter = input("Please input an English letter: ")//输入相关明文信息
secert_number = input("Please input a security number: ")//输入偏移量
try:
if user_letter.isalnum() == True and secert_number.isdigit() == True:
//利用isalnum来判断用户输入的是否为字母数字组合,偏移量secert_number必须是纯数字
passwd_letter = []
for i in user_letter:
if 'a'<=i<='z':
pwd = chr(ord('a') + ((ord(i) - ord('a')) + int(secert_number))%26)
elif 'A'<=i<='Z':
pwd = chr(ord('A') + ((ord(i) - ord('A')) + int(secert_number))%26)
else:
pwd = chr(ord('0') + ((ord(i) - ord('0')) + int(secert_number))%10)
passwd_letter.append(pwd)
CaesarCipherer = "".join(passwd_letter)
print(user_letter,"==>",CaesarCipherer)
break
except:
print("Error! Please input again!")
上述代码中:chr(ord('a') + ((ord(i) - ord('a')) + int(secert_number))%26)这个我进行一下说明:设‘a’的ASCII码为P,从for循环中获取用户的i的ASCII码为C,偏移量为X,加密后的单个字符的ASCII码为Y,字母大写有26个,小写有26个,数字有10个,所以进行凯撒密码加密的单个字符的ASCII码的关系如下:
Y = P+(C-P)+X%26 // %为取余操作
数字的加密:
Y = P+(C-P)+X%10
