python中凯撒密码num=num+key是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。根据查询相关公开信息,凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替代方法将信息中的每一个英文字母循环替换为字母表序列中该字符后面的第k个字符(k为密钥)。加密方法:C=(P+k)mod26,P为原文字符,k为密钥,解密方法:P=(C-3)mod26。
凯撒密码是对字母表整体进行偏移的一种变换加密。因此,建立一个字母表,对明文中每个字母,在这个字母表中偏移固定的长度即可得到对应的密文字母。
最基本的实现如下:
def caesarcipher(s: str,rot: int=3) -str:
_ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
encode = ''
i = 0
for c in s:
try:
encode += _[(_.index(c.upper()) + rot) % len(_)]
except (Exception,) as e:
encode += c
return encode
print(caesarcipher('hellow'))
print(caesarcipher('KHOORZ', -3))
如果要求解密后保持大小写,那么,字母表_还需要包含所有小写字母并且index时不对c做upper处理.
同样的,也可以在字母表中追加数字,各种符号,空格等.
def use_list(): str_before=input("请输入明文:") str_change=str_before.lower() str_list=list(str_change) str_list_change=str_list i=0 whilei
import string
def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
lower = string.ascii_lowercase #小写字母
upper = string.ascii_uppercase #大写字母
before = string.ascii_letters #无偏移的字母顺序 小写+大写
after = lower[k:] + lower[:k] + upper[k:] + upper[:k] #偏移后的字母顺序 还是小写+大写
#分别把小写字母和大写字母偏移后再加到一起
table = ''.maketrans(before, after) #创建映射表
return s.translate(table) #对s进行偏移 即加密
s = input('请输入一个字符串:')
k = int(input('请输入一个整数密钥:'))
print(kaisa(s, k))
调用此函数
s = raw_input('[开始加密]please input your str:')
s = list(s)
n = 0
for sw in s:
s[n] = chr(ord(sw)+3)
n = n + 1
sout = ''
for sw2 in s:
sout = sout + sw2
print '[加密结果]:',sout
解密的类似,主要用到ord、chr函数。
# codinng=utf-8
x = 'a b c d e f g h i j k l m n o p q r s t u v w x y z'.split(' ')
y = 'n o p q r s t u v w x y z a b c d e f g h i j k l m'.split(' ')
X = map(lambda x: x.upper(), x)
Y = map(lambda x: x.upper(), y)
dict_kaisa = dict(zip(x + X, y + Y)) # 创建一个字典, 键为原字符串, 值为加密字符串
# 定义凯撒加密函数, 输入字符串, 输出凯撒加密后字符串
def kaisa(string):
result = []
for i in range(len(string)):
if string[i] in dict_kaisa.keys():
result.append(dict_kaisa[string[i]])
else:
result.append(string[i])
return ''.join(result)
print(kaisa('The Zen of Python')) # 结果为Gur Mra bs Clguba