在历史悠久的加密技术中,恺撒密码以其简单却有效的原理闻名。通过固定的字母位移,明文可以被转换成密文,而解密则是逆向操作。这种技术不仅适用于英文字母,还可以扩展到其他语言的字符体系,如日语的平假名或汉语的拼音。本文探讨了恺撒密码的基本原理及其在实际应用中的使用案例,并用python来实现该方法。
工作中经常性会需要对一些信息进行解密,人们普遍使用一些较为简单的加密方式。加密技术不仅令人着迷,还在信息安全领域发挥着重要作用。通过深入理解这些方法,我们能更好地保护数据安全,同时也能理解历史上许多重要文献背后隐藏的秘密。恺撒密码作为加密技术的先驱,不仅启发了现代密码学的发展,也提醒我们保持对数据安全和隐私的关注。
在这篇文章中,我们将探索恺撒密码和相关字符加解密的基本原理及其在现代应用中的价值。通过python分析其加密和解密过程,我们可以更好地理解数据保护的重要性,以及加密技术如何在信息交流和安全中发挥作用。
目录
一、凯撒密码加、解密
1.1 通过位移的python实现
1.2 通过建立映射的python实现
二、函数映射加、解密
一、凯撒密码加、解密
我们首先学习通过凯撒密码进行解密。恺撒密码是一种通过将明文字母表按照固定数目进行位移来加密的方法。此加密技术不仅适用于英文字母,也可以应用于其他字符体系,如日语中的平假名或汉语拼音。
如下图所示我们用小写的英文字母表示明文,用大写英文字母表示密文,并对字母表平移三位字母方式进行加密。此处我们需要对KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV 这段密文进行解密,并将解密后的信息写入同目录caesar.txt文件中。
1.1 通过位移的python实现
# 定义一个名为 decrypt 的函数,该函数接收两个参数:ciphertext(密文)和 shift(位移量)
def decrypt(ciphertext, shift):
# 初始化一个空字符串 plaintext,用于存储解密后的明文
plaintext = ""
# 遍历密文中的每个字符
for char in ciphertext:
# 判断字符是否为大写英文字母
if 'A' <= char <= 'Z':
# 对大写英文字母进行解密操作,ord(char) 获取字符的 ASCII 码值,ord('A') 是字母 A 的 ASCII 码值
# (ord(char) - ord('A') - shift) 计算字符在字母表中的相对位置并减去位移量
# % 26 确保结果仍在 26 个英文字母的范围内
# chr(...) 将计算后的 ASCII 码值转换回字符
decrypted_char = chr((ord(char) - ord('A') - shift) % 26 + ord('A'))
# .lower() 将解密后的大写字母转换为小写
plaintext += decrypted_char.lower() # 转换为小写
else:
# 如果字符不是大写英文字母,则直接添加到 plaintext 字符串中
plaintext += char
return plaintext
# 给定的密文
ciphertext = "KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV"
# 解密密文,假设密文是通过向后平移3位加密的
shift = 3
decrypted_text = decrypt(ciphertext, shift)
print("明文信息为:", decrypted_text)
# 将解密后的文本写入文件
file_path = './caesar.txt'
with open(file_path, 'w') as file:
file.write(decrypted_text)
1.2 通过建立映射的python实现
list_c = {'A':'x','B':'y','C':'z','D':'a','E':'b','F':'c','G':'d','H':'e','I':'f','J':'g','K':'h','L':'i',
'M':'j','N':'k','O':'l','P':'m','Q':'n','R':'o','S':'p','T':'q','U':'r','V':'s','W':'t','X':'u','Y':'v','Z':'w'}
# 给定的密文
ciphertext = "KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV"
# 解密密文
print("明文信息为:",ciphertext)
plaintext = ""
for char in list(ciphertext):
print(list_c[char])
plaintext += str(list_c[char])
# plaintext += list_c[char]
print("加密信息为:",plaintext)
# 将解密后的文本写入文件
file_path = './caesar.txt'
with open(file_path, 'w') as file:
file.write(plaintext)
打印结果:
明文信息为: KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV
加密信息为: helloiamapoliceofficerpleaseshowmeyouridentificationdocuments
二、函数映射加、解密
这张图片展示了两个加密和解密的字符串,分别使用了不同的字母替换方法。第一个字符串使用了一种特定的字母排列方式来隐藏信息,而第二个字符串则显示了如何通过相同的排列方式来解密。
使用python实现映射关系
list_c = {'a':'D','b':'K','c':'V','d':'Q','e':'F','f':'I','g':'B','h':'J','i':'W','j':'P','k':'E','l':'S',
'm':'C','n':'X','o':'H','p':'T','q':'M','r':'Y','s':'A','t':'U','u':'O','v':'L','w':'R','x':'G','y':'Z','z':'N'}
# 给定的密文
ciphertext = "this is the police please stay calm"
# 解密密文
print("明文信息为:",ciphertext)
plaintext = ""
for char in list(ciphertext):
if char == " ":
plaintext += char
# print(list_c[char])
else:
plaintext += str(list_c[char])
# plaintext += list_c[char]
print("加密信息为:",plaintext)
# 将解密后的文本写入文件
file_path = '/home/qingjiao/数据安全应用/plaintext.txt'
with open(file_path, 'w') as file:
file.write(plaintext)
打印结果:
明文信息为: this is the police please stay calm
加密信息为: UJWA WA UJF THSWVF TSFDAF AUDZ VDSC