< Python 实现-加密解密技术>
Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!
喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!"
一、凯撒密码
凯撒密码(Caesar cipher)是一种最简单且最广为人知的加密技术。它是一种替换式的密码,通过把字母移动固定数目的位置进行加密。凯撒密码通常又被称作恺撒移位密码或者凯撒加密法。
凯撒密码的原理是:通过把字母表中的每一个字母移动固定数目的位置进行加密。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期的凯撒大帝命名的,当年凯撒曾用此方法与其将军们进行联系。
凯撒密码的安全性基于加密的密钥,即字母移动的位数。只要知道了这个密钥,解密就变得非常简单。因此,凯撒密码并不适合用于加密敏感或重要的信息,但在某些特定场合或教学目的中,它仍然是一个有用的工具。
def caesar_cipher(text, shift):
result = ""
# 凯撒密码加密逻辑
for char in text:
if char.isalpha():
ascii_offset = ord('A') if char.isupper() else ord('a')
shifted = (ord(char) - ascii_offset + shift) % 26 + ascii_offset
result += chr(shifted)
else:
result += char
return result
# 加密
def encrypt(text, shift):
return caesar_cipher(text, shift)
# 解密
def decrypt(text, shift):
return caesar_cipher(text, -shift)
def main():
while True:
print("1. 加密")
print("2. 解密")
print("3. 退出")
choice = input("请选择操作(1/2/3):")
if choice == '1':
text = input("请输入要加密的文本:")
shift = int(input("请输入偏移量:"))
encrypted_text = encrypt(text, shift)
print("加密后的文本:", encrypted_text)
elif choice == '2':
text = input("请输入要解密的文本:")
shift = int(input("请输入解密时使用的偏移量(与加密时相同):"))
decrypted_text = decrypt(text, shift)
print("解密后的文本:", decrypted_text)
elif choice == '3':
print("程序已退出。")
break
else:
print("无效的选择,请重新选择。")
if __name__ == "__main__":
main()
运行结果:
D:\anaconda\envs\AI_env\python.exe D:/BaiduSyncdisk/BigData/数据结构和算法python/测试代码/排序/Untitled27.py
1. 加密
2. 解密
3. 退出
请选择操作(1/2/3):1
请输入要加密的文本:HELLO
请输入偏移量:10
加密后的文本: ROVVY
1. 加密
2. 解密
3. 退出
请选择操作(1/2/3):2
请输入要解密的文本:ROVVY
请输入解密时使用的偏移量(与加密时相同):10
解密后的文本: HELLO
1. 加密
2. 解密
3. 退出
请选择操作(1/2/3):3
程序已退出。
Process finished with exit code 0
二、Vigenere 密码
Vigenère密码是一种使用一系列凯撒密码组成密码字母表的加密算法,它属于多表密码的一种简单形式。这种密码以其简单易用而著称,同时初学者通常难以破解,因此也被称为“不可破译的密码”。
Vigenère密码的原理是通过使加密相同明文的秘钥不同,来掩盖字符的频率。在加密过程中,相同的明文字符经过不同的秘钥字符加密后,会变成不同的密文,从而有效地掩盖了明文字符的字符频率。
该密码方法最早由吉奥万·巴蒂斯塔·贝拉索在1553年描述,但是后来误传为是由法国外交官布莱斯·德·维吉尼亚所创造,因此现在被称为“Vigenère密码”。
Vigenère密码的安全性主要取决于秘钥的长度。秘钥越长,每个字符分别进行加密,破解的难度就越大。如果没有得到秘钥,很难对密文进行解密。
请注意,尽管Vigenère密码在历史上曾被认为难以破解,但现代密码学已经发展出了更强大和安全的加密算法。因此,对于需要高度安全性的应用,建议使用现代加密算法,而不是依赖Vigenère密码。
def vigenere_encrypt(plaintext, key):
"""
Vigenère加密函数
:param plaintext: 明文
:param key: 密钥
:return: 密文
"""
ciphertext = ""
key_index = 0
for char in plaintext:
if char.isalpha(): # 只处理字母字符
if char.isupper(): # 大写字母
offset = ord(key[key_index % len(key)]) - ord('A')
ciphertext += chr((ord(char) - ord('A') + offset) % 26 + ord('A'))
else: # 小写字母
offset = ord(key[key_index % len(key)]) - ord('a')
ciphertext += chr((ord(char) - ord('a') + offset) % 26 + ord('a'))
key_index += 1
else: # 非字母字符保持不变
ciphertext += char
return ciphertext
def vigenere_decrypt(ciphertext, key):
"""
Vigenère解密函数
:param ciphertext: 密文
:param key: 密钥
:return: 明文
"""
plaintext = ""
key_index = 0
for char in ciphertext:
if char.isalpha(): # 只处理字母字符
if char.isupper(): # 大写字母
offset = ord(key[key_index % len(key)]) - ord('A')
plaintext += chr((ord(char) - ord('A') - offset) % 26 + ord('A'))
else: # 小写字母
offset = ord(key[key_index % len(key)]) - ord('a')
plaintext += chr((ord(char) - ord('a') - offset) % 26 + ord('a'))
key_index += 1
else: # 非字母字符保持不变
plaintext += char
return plaintext
if __name__ == '__main__':
plaintext = input("请输入明文(可包含英文字母、空格和标点符号): ")
key = input("请输入密钥(仅包含英文字母): ")
ciphertext = vigenere_encrypt(plaintext, key)
print("加密后的密文为:", ciphertext)
ciphertext = input("请输入密文:")
plaintext_recovered = vigenere_decrypt(ciphertext, key)
print("解密后的明文为:", plaintext_recovered)
运行结果:
================================运行结果===========================================
D:\anaconda\envs\AI_env\python.exe D:/BaiduSyncdisk/BigData/数据结构和算法python/测试代码/排序/Untitled27.py
请输入明文(可包含英文字母、空格和标点符号): HELLO
请输入密钥(仅包含英文字母): KEY
加密后的密文为: RIJVS
请输入密文:RIJVS
解密后的明文为: HELLO
Process finished with exit code 0