简介
凯撒密码(Caesar's code)作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
ASCII表
http://www.asciima.com/ascii/12.html
实现凯撒密码算法核心在下面
加密
C=E(p)=(p+3) mod 26
C=E(p)=(p+k) mod 26
假设p为需要加密的字母,位数3就是加密解密的密钥,可以参照上面的图表
解密
p=D(C)=(C-k) mod 26
算法实现
先设一个对照表
,然后用两个函数
实现加密
解密
,加密函数传入需要加密的明文
和位数
,解密函数传入需要解密的密文
和位数
letter_list='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
def Encrypt(plaintext,key):
ciphertext = ''
for i in plaintext:
if i.isalpha():
if i.isupper():
ciphertext += letter_list[(ord(i)-65+key)%26]
else:
ciphertext += letter_list[(ord(i)-97+key)%26]
else:
ciphertext += i
return ciphertext
def Decrypt(ciphertext,key):
plaintext=''
for i in ciphertext: #遍历明文
if i.isalpha(): #判断是否为字母
if i.isupper():
#明文是否为字母,如果是,判断大小写,分别用ASCII进行加密
plaintext += letter_list[(ord(i)-65+key)%26]
else:
#如果是小写,需要转成小写,因为letter_list中都是大写
plaintext += letter_list[(ord(i)-97+key)%26]
else:
#如果不为字母,直接添加到密文字符里
plaintext += i
return ciphertext
网友评论