采用替换的方式对英文字母进行处理,将每一个英文字符循环替换为字母表序列中该字符的后面的第三个字符,即循环右移3位。
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
若设偏移量位n,可以得出加解密公式:
1、简单版本(只实现了小写英文字符串的加密)
def encrypt(s):
ciphertext = ''
for i in s:
i = chr(ord('a')+(ord(i) - ord('a') + 3) % 26)
ciphertext += i
return ciphertext
def decrypt(s):
message = ''
for i in s:
i = chr(ord('a')+(ord(i) - ord('a') - 3) % 26)
message += i
return message
if __name__ == '__main__':
s = input('请输入一串小写字母组成的字符串:')
print(f'将{s}加密后的密文 =', encrypt(s))
print(f'将{s}解密后的明文 =' , decrypt(s))
2、升级版本(实现中文和英文的加密)
def encrypt(s):
ciphertext = ''
for i in s:
if 'a' <= i <= 'z':
# 判断小写字母
i = chr(ord('a') + (ord(i) - ord('a') + 3) % 26)
elif 'A' <= i <= 'Z':
# 判断大写字母
i = chr(ord('A') + (ord(i) - ord('A') + 3) % 26)
elif 0x4E00 <= ord(i) <= 0x9FA5:
# 判断中文字符
i = chr(ord(i) + 3)
else:
# 其他字符不做加密
pass
# 生成密文
ciphertext += i
return ciphertext
def decrypt(s):
message = ''
for i in s:
if 'a' <= i <= 'z':
# 判断小写字母
i = chr(ord('a') + (ord(i) - ord('a') - 3) % 26)
elif 'A' <= i <= 'Z':
# 判断大写字母
i = chr(ord('A') + (ord(i) - ord('A') - 3) % 26)
elif 0x4E00 <= ord(i) <= 0x9FA5:
# 判断中文字符
i = chr(ord(i) - 3)
else:
# 其他字符不做加密
pass
# 生成密文
message += i
return message
if __name__ == '__main__':
s = input('请输入一串小写字母组成的字符串:')
print(f'将"{s}"加密后的密文 =', encrypt(s))
print(f'将"{s}"解密后的明文 =' , decrypt(s))