平平爱恰糖糖
平平爱恰糖糖
发布于 2025-07-07 / 26 阅读
0
0

探索Python加密解密工具:从凯撒密码到密码学基础

密码学是一门研究如何安全传输和存储信息的学科,其历史可以追溯到古代。本文将通过一个简单的Python加密解密工具,深入探讨密码学的基本原理和实现方法。这个工具基于经典的凯撒密码算法,虽然在现代密码学中已经不再安全,但它为我们理解更复杂的加密技术提供了良好的起点。

🔐 想象一下:用简单的字母移位保护你的秘密信息...

凯撒密码的原理与实现

凯撒密码是一种最古老的加密方法,相传由古罗马皇帝尤利乌斯·凯撒使用。它的基本原理是将明文中的每个字母按照固定的位数进行移位,从而得到密文。例如,当移位位数为3时,字母'A'将被替换为'D','B'替换为'E',依此类推。

Python实现代码

"""Crypto: tool for encrypting and decrypting messages.

Exercises

1. Review 'ord' and 'chr' functions and letter-to-number mapping.
2. Explain what happens if you use key 26.
3. Find a way to decode a message without a key.
4. Encrypt numbers.
5. Make the encryption harder to decode.

Adapted from code in https://inventwithpython.com/chapter14.html
"""


def encrypt(message, key):
    """Encrypt message with key."""
    result = ''

    # Iterate letters in message and encrypt each individually.

    for letter in message:
        if letter.isalpha():

            # Letters are numbered like so:
            # A, B, C - Z is 65, 66, 67 - 90
            # a, b, c - z is 97, 98, 99 - 122

            num = ord(letter)

            if letter.isupper():
                base = ord('A')
            else:
                assert letter.islower()
                base = ord('a')

            # The encryption equation:

            num = (num - base + key) % 26 + base

            result += chr(num)

        elif letter.isdigit():

            # TODO: Encrypt digits.
            result += letter

        else:
            result += letter

    return result


def decrypt(message, key):
    """Decrypt message with key."""
    return encrypt(message, -key)


def decode(message):
    """Decode message without key."""
    pass  # TODO


def get_key():
    """Get key from user."""
    try:
        text = input('Enter a key (1 - 25): ')
        key = int(text)
        return key
    except:
        print('Invalid key. Using key: 0.')
        return 0


print('Do you wish to encrypt, decrypt, or decode a message?')
choice = input()

if choice == 'encrypt':
    phrase = input('Message: ')
    code = get_key()
    print('Encrypted message:', encrypt(phrase, code))
elif choice == 'decrypt':
    phrase = input('Message: ')
    code = get_key()
    print('Decrypted message:', decrypt(phrase, code))
elif choice == 'decode':
    phrase = input('Message: ')
    print('Decoding message:')
    decode(phrase)
else:
    print('Error: Unrecognized Command')

代码解析

这个加密工具的核心是encryptdecrypt函数,让我们详细分析一下:

字符编码转换

  • 使用ord()函数将字符转换为对应的ASCII码值

  • 使用chr()函数将ASCII码值转换回字符

  • 例如,ord('A')返回65,chr(65)返回'A'

加密过程

  • 对于每个字母,首先确定其是大写还是小写

  • 计算相对于基准值('A'或'a')的偏移量

  • 应用密钥进行移位,并使用模运算确保结果在字母表范围内

  • 最后转换回字符并添加到结果中

解密过程

  • 解密函数实际上复用了加密函数,只需使用负密钥即可

  • 这是因为凯撒密码的加密和解密过程是对称的

练习题解答

下面我们来解答代码中提出的几个练习题:

1. 复习 “ord” 和 “chr” 函数以及字母到数字的映射

  • 使用ord()函数将字符转换为对应的ASCII码值

  • 使用chr()函数将ASCII码值转换回字符

  • 例如,ord('A')返回65,chr(65)返回'A'

2. 解释一下如果使用密钥 26 会发生什么情况

由于模26运算的特性,当密钥为26时,所有字母的偏移量都是26 % 26 = 0。这意味着每个字母都会被替换为自身,加密后的文本与原文完全相同。因此,密钥26相当于没有加密。

3. 找到一种无需密钥就能解码消息的方法

对于凯撒密码,可以使用频率分析方法进行破解。统计密文中每个字母的出现频率,与目标语言中字母的正常频率分布进行对比。例如,在英语中,字母'E'是最常用的字母,因此密文中出现频率最高的字母很可能对应'E'。通过这种方式可以推测出可能的密钥。

4. 加密数字

要加密数字,我们可以采用类似的方法。以下是改进后的加密函数:

def encrypt(message, key):
    """Encrypt message with key."""
    result = ''

    for letter in message:
        if letter.isalpha():
            num = ord(letter)
            if letter.isupper():
                base = ord('A')
            else:
                base = ord('a')
            num = (num - base + key) % 26 + base
            result += chr(num)
        elif letter.isdigit():
            # 加密数字
            num = int(letter)
            encrypted_num = (num + key) % 10
            result += str(encrypted_num)
        else:
            result += letter

    return result

5. 让加密更难被破解

凯撒密码非常容易被破解,有很多方法可以增强其安全性:

  • 维吉尼亚密码:使用多个凯撒密码组成的密钥序列,而不是单一密钥

  • 替换密码:使用更复杂的替换规则,而不是简单的移位

  • 多表加密:结合多个替换表进行加密

  • 哈希函数:使用单向哈希函数进行加密,虽然不能解密但可以验证

  • 现代加密算法:如AES、RSA等,这些算法在现代密码学中被广泛使用

密码学的现代应用

虽然凯撒密码已经不再安全,但它为我们理解密码学的基本概念提供了很好的起点。在现代,密码学在以下领域有着广泛的应用:

网络安全

保护网络通信不被窃听和篡改

电子商务

确保在线交易的安全性

区块链技术

比特币等加密货币的基础

数据存储

保护敏感数据不被未授权访问

身份验证

确保用户身份的真实性

🚀 现在,你已经了解了密码学的基础知识,尝试运行代码并体验加密解密的过程吧!

通过学习这个简单的加密工具,我们不仅掌握了凯撒密码的实现方法,还了解了密码学的基本原理和应用场景。密码学是一个充满挑战和机遇的领域,值得我们深入探索。

官方群聊:703681056


评论