古典密码学 (一)
1.古典密码学 (一)
古典密码学 (一)
凯撒密码
- 恺撒密码 (Caesar Cipher) 又被称为 凯撒变换或者叫做变换密码。该密码是以凯撒大帝的名字命名的。 凯撒密码是一种替换加密,通过该明文中的所有字母都在字母表上向后或者向前移动固定数目替换为密文 例如 当偏移量为3的时候,字母A就会变成D,字母B就会被替换成E
- 凯撒密码不仅本身是一种加密方式,同样也是作为很多加密算法的重要过程,例如凯撒密码通常会被作为维吉尼亚密码中的一个步骤。
# 示例代码
def caesar_cipher(text, shift, mode='encrypt'):
"""
实现凯撒密码的加密或解密。
参数:
text : str
需要加密或解密的文本。
shift : int
字符移动的位置数。
mode : str, 可选
操作模式,'encrypt' 为加密,'decrypt' 为解密,默认为 'encrypt'。
返回:
str
加密或解密后的文本。
"""
result = ""
# 根据模式调整偏移量
if mode == 'decrypt':
shift = -shift
for char in text:
# 处理字母字符
if char.isalpha():
start = ord('a') if char.islower() else ord('A')
offset = (ord(char) - start + shift) % 26
result += chr(start + offset)
else:
# 非字母字符直接添加
result += char
return result
# 输入原文
text = input("")
# 输入偏移量
shift = int(input(""))
# 执行加密操作
encrypted_text = caesar_cipher(text, shift)
print("Encrypted:", encrypted_text)
# 执行解密操作
decrypted_text = caesar_cipher(encrypted_text, shift, mode='decrypt')
print("Decrypted:", decrypted_text)
Atbash 密码
- 埃特巴什码 (Atbash Cipher)是一种简单的替换密码,与凯撒密码类型,区别在于替换的规则不通过 一般 埃特巴什码使用下面的码表
明文:ABCDEFGHIJKLMNOPRSTUVWXYZ
密文:ZYXWVUTSRPONMLKJIHGEFDCBA
- 这是使用一种将字母表前后倒转进行替换 同样可以直接按照码表转回进行解密或者使用词频分析进行破解
# 示例代码
def atbash_cipher(text):
"""
实现Atbash密码的加密和解密。
参数:
text : str
需要加密或解密的文本。
返回:
str
加密或解密后的文本。
"""
result = ""
for char in text:
if char.isalpha():
# 判断字母大小写并进行转换
start = ord('a') if char.islower() else ord('A')
# 使用25 - (ord(char) - start)实现Atbash密码逻辑
result += chr(start + (25 - (ord(char) - start)))
else:
# 非字母字符直接添加
result += char
return result
# 输入原文
text = input("Enter the text: ")
# 输入要执行的操作 输入 1 执行加密 输入2 执行解密
choice = int(input("Enter 1 for encryption or 2 for decryption: "))
if choice == 1:
# 执行加密操作
encrypted_text = atbash_cipher(text)
print("Encrypted:", encrypted_text)
elif choice == 2:
# 再次执行Atbash密码将加密文本转换回原文
decrypted_text = atbash_cipher(text)
print("Decrypted:", decrypted_text)
else:
print("Invalid choice. Exiting.")
exit()
将两种 加密方式进行混合 中间再插一次 字符串反转
def caesar_cipher(text, shift, mode='encrypt'):
"""
实现凯撒密码的加密或解密。
参数:
text : str
需要加密或解密的文本。
shift : int
字符移动的位置数。
mode : str, 可选
操作模式,'encrypt' 为加密,'decrypt' 为解密,默认为 'encrypt'。
返回:
str
加密或解密后的文本。
"""
result = ""
# 根据模式调整偏移量
if mode == 'decrypt':
shift = -shift
for char in text:
# 处理字母字符
if char.isalpha():
start = ord('a') if char.islower() else ord('A')
offset = (ord(char) - start + shift) % 26
result += chr(start + offset)
else:
# 非字母字符直接添加
result += char
return result
def atbash_cipher(text):
"""
实现Atbash密码的加密和解密。
参数:
text : str
需要加密或解密的文本。
返回:
str
加密或解密后的文本。
"""
result = ""
for char in text:
if char.isalpha():
# 判断字母大小写并进行转换
start = ord('a') if char.islower() else ord('A')
# 使用25 - (ord(char) - start)实现Atbash密码逻辑
result += chr(start + (25 - (ord(char) - start)))
else:
# 非字母字符直接添加
result += char
return result
# 字符串反转
def reverse_string(text):
return text[::-1]
# 加密的文本
text = input()
# 偏移量
shift = int(input())
# 使用凯撒密码加密后,再使用Atbash密码加密,并将结果反转
print("加密:"+atbash_cipher(reverse_string(caesar_cipher(text, shift))))
加密之后的密文 = atbash_cipher(reverse_string(caesar_cipher(text, shift)))
print("解密:"+atbash_cipher(reverse_string(caesar_cipher(加密之后的密文, shift, mode='decrypt'))))
本文来自博客园,作者:ZapcoMan,转载请注明原文链接:https://www.cnblogs.com/ZapcoMan/p/18462282
合集:
密码学
分类:
渗透测试 / 密码学
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!