古典密码学 (一)

古典密码学 (一)

凯撒密码

  • 恺撒密码 (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'))))

__EOF__

本文作者ZapcoMan
本文链接https://www.cnblogs.com/ZapcoMan/p/18462282.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ZapcoMan  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示