古典暗码学 (一)

张春  金牌会员 | 2024-10-13 15:48:19 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 692|帖子 692|积分 2076

古典暗码学 (一)

凯撒暗码


  • 恺撒暗码 (Caesar Cipher) 又被称为 凯撒变更或者叫做变更暗码。该暗码是以凯撒大帝的名字命名的。 凯撒暗码是一种替换加密,通过该明文中的所有字母都在字母表上向后或者向前移动固定数目替换为密文 比方 当偏移量为3的时间,字母A就会变成D,字母B就会被替换成E
  • 凯撒暗码不仅本身是一种加密方式,同样也是作为很多加密算法的重要过程,比方凯撒暗码通常会被作为维吉尼亚暗码中的一个步调。
  1. # 示例代码
  2. def caesar_cipher(text, shift, mode='encrypt'):
  3.     """
  4.     实现凯撒密码的加密或解密。
  5.     参数:
  6.     text : str
  7.         需要加密或解密的文本。
  8.     shift : int
  9.         字符移动的位置数。
  10.     mode : str, 可选
  11.         操作模式,'encrypt' 为加密,'decrypt' 为解密,默认为 'encrypt'。
  12.     返回:
  13.     str
  14.         加密或解密后的文本。
  15.     """
  16.     result = ""
  17.     # 根据模式调整偏移量
  18.     if mode == 'decrypt':
  19.         shift = -shift
  20.     for char in text:
  21.         # 处理字母字符
  22.         if char.isalpha():
  23.             start = ord('a') if char.islower() else ord('A')
  24.             offset = (ord(char) - start + shift) % 26
  25.             result += chr(start + offset)
  26.         else:
  27.             # 非字母字符直接添加
  28.             result += char
  29.     return result
  30. # 输入原文
  31. text = input("")
  32. # 输入偏移量
  33. shift = int(input(""))
  34. # 执行加密操作
  35. encrypted_text = caesar_cipher(text, shift)
  36. print("Encrypted:", encrypted_text)
  37. # 执行解密操作
  38. decrypted_text = caesar_cipher(encrypted_text, shift, mode='decrypt')
  39. print("Decrypted:", decrypted_text)
复制代码
Atbash 暗码


  • 埃特巴什码 (Atbash Cipher)是一种简单的替换暗码,与凯撒暗码类型,区别在于替换的规则不通过 一般 埃特巴什码使用下面的码表
  1. 明文:ABCDEFGHIJKLMNOPRSTUVWXYZ
  2. 密文:ZYXWVUTSRPONMLKJIHGEFDCBA
复制代码

  • 这是使用一种将字母表前后倒转进行替换 同样可以直接按照码表转回进行解密或者使用词频分析进行破解
  1. # 示例代码
  2. def atbash_cipher(text):
  3.     """
  4.     实现Atbash密码的加密和解密。
  5.     参数:
  6.     text : str
  7.         需要加密或解密的文本。
  8.     返回:
  9.     str
  10.         加密或解密后的文本。
  11.     """
  12.     result = ""
  13.     for char in text:
  14.         if char.isalpha():
  15.             # 判断字母大小写并进行转换
  16.             start = ord('a') if char.islower() else ord('A')
  17.             # 使用25 - (ord(char) - start)实现Atbash密码逻辑
  18.             result += chr(start + (25 - (ord(char) - start)))
  19.         else:
  20.             # 非字母字符直接添加
  21.             result += char
  22.     return result
  23. # 输入原文
  24. text = input("Enter the text: ")
  25. # 输入要执行的操作 输入 1 执行加密 输入2 执行解密
  26. choice = int(input("Enter 1 for encryption or 2 for decryption: "))
  27. if choice == 1:
  28.     # 执行加密操作
  29.     encrypted_text = atbash_cipher(text)
  30.     print("Encrypted:", encrypted_text)
  31. elif choice == 2:
  32.     # 再次执行Atbash密码将加密文本转换回原文
  33.     decrypted_text = atbash_cipher(text)
  34.     print("Decrypted:", decrypted_text)
  35. else:
  36.     print("Invalid choice. Exiting.")
  37.     exit()
复制代码
将两种 加密方式进行混淆 中间再插一次 字符串反转
  1. def caesar_cipher(text, shift, mode='encrypt'):
  2.     """
  3.     实现凯撒密码的加密或解密。
  4.     参数:
  5.     text : str
  6.         需要加密或解密的文本。
  7.     shift : int
  8.         字符移动的位置数。
  9.     mode : str, 可选
  10.         操作模式,'encrypt' 为加密,'decrypt' 为解密,默认为 'encrypt'。
  11.     返回:
  12.     str
  13.         加密或解密后的文本。
  14.     """
  15.     result = ""
  16.     # 根据模式调整偏移量
  17.     if mode == 'decrypt':
  18.         shift = -shift
  19.     for char in text:
  20.         # 处理字母字符
  21.         if char.isalpha():
  22.             start = ord('a') if char.islower() else ord('A')
  23.             offset = (ord(char) - start + shift) % 26
  24.             result += chr(start + offset)
  25.         else:
  26.             # 非字母字符直接添加
  27.             result += char
  28.     return result
  29. def atbash_cipher(text):
  30.     """
  31.     实现Atbash密码的加密和解密。
  32.     参数:
  33.     text : str
  34.         需要加密或解密的文本。
  35.     返回:
  36.     str
  37.         加密或解密后的文本。
  38.     """
  39.     result = ""
  40.     for char in text:
  41.         if char.isalpha():
  42.             # 判断字母大小写并进行转换
  43.             start = ord('a') if char.islower() else ord('A')
  44.             # 使用25 - (ord(char) - start)实现Atbash密码逻辑
  45.             result += chr(start + (25 - (ord(char) - start)))
  46.         else:
  47.             # 非字母字符直接添加
  48.             result += char
  49.     return result
  50. # 字符串反转
  51. def reverse_string(text):
  52.     return text[::-1]
  53. # 加密的文本
  54. text = input()
  55. # 偏移量
  56. shift = int(input())
  57. # 使用凯撒密码加密后,再使用Atbash密码加密,并将结果反转
  58. print("加密:"+atbash_cipher(reverse_string(caesar_cipher(text, shift))))
  59. 加密之后的密文 = atbash_cipher(reverse_string(caesar_cipher(text, shift)))
  60. print("解密:"+atbash_cipher(reverse_string(caesar_cipher(加密之后的密文, shift, mode='decrypt'))))
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表