古典密码学 (一)
凯撒密码
- 恺撒密码 (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'))))
千百度
© 版权声明
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
THE END
暂无评论内容