张春 发表于 2024-10-13 15:48:19

古典暗码学 (一)

古典暗码学 (一)

凯撒暗码


[*]恺撒暗码 (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'))))
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 古典暗码学 (一)