使用Python实现维吉尼亚密码加密

维吉尼亚密码是一种经典的加密算法,它使用字母表中的位移,结合一个密钥来加密消息。对于刚入行的小白来说,实现这一算法是一个很好的练手项目。本文将逐步教你如何实现维吉尼亚密码加密,通过清晰的步骤和代码注释,帮助你理解其中的每个部分。

流程概述

在我们开始编码之前,首先明白维吉尼亚密码的基本流程。下表展示了加密的主要步骤。

步骤 描述
1 输入明文和密钥
2 对明文和密钥进行预处理(例如,去掉空格和将字母转为大写)
3 生成加密后的密文
4 输出加密结果

流程图

以下是维吉尼亚密码加密的流程图,使用mermaid语法进行展示:

flowchart TD
    A[开始] --> B[输入明文和密钥]
    B --> C[预处理明文和密钥]
    C --> D[生成密文]
    D --> E[输出结果]
    E --> F[结束]

各步骤详解

我们将按照上述流程详细讲解每一步需要执行的操作,并给出相应的Python代码。

步骤 1: 输入明文和密钥

# 输入明文和密钥
plaintext = input("请输入明文: ")
key = input("请输入密钥: ")

解释:这里使用input()函数获取用户输入的明文和密钥。

步骤 2: 预处理明文和密钥

我们需要确保明文和密钥中的字母都是大写,并去掉所有非字母字符。

import string

# 预处理:去掉空格,转换成大写
def preprocess(text):
    text = text.replace(" ", "").upper()  # 去掉空格并转换为大写
    return ''.join(filter(str.isalpha, text))  # 过滤非字母字符

# 处理明文和密钥
processed_plaintext = preprocess(plaintext)
processed_key = preprocess(key)

解释

  • 使用replace方法去掉空格。
  • upper()方法将字符串中的所有字母转换为大写。
  • filter结合str.isalpha用来过滤掉非字母字符。

步骤 3: 生成加密后的密文

接下来,我们需要实现加密逻辑。维吉尼亚密码的加密过程是将明文字符和密钥字符的位置对应后,进行位移运算。

def vigenere_encrypt(plaintext, key):
    cipher_text = ""
    key_length = len(key)

    for i in range(len(plaintext)):
        # 获取当前明文字符和对应密钥字符
        p = ord(plaintext[i]) - ord('A')  # 明文字符的位移
        k = ord(key[i % key_length]) - ord('A')  # 密钥字符的位移
        # 加密字符
        c = (p + k) % 26  # 计算加密后字符的索引
        cipher_text += chr(c + ord('A'))  # 转换为字符并添加到密文

    return cipher_text

# 生成密文
ciphered_text = vigenere_encrypt(processed_plaintext, processed_key)

解释

  • ord()函数获取字符的Unicode码值,减去ord('A')是为了将字符转换为数字(0-25区间)。
  • 使用%运算符确保密钥字符循环使用。
  • 将加密后的字符转换回字母并加入密文字符串。

步骤 4: 输出加密结果

最后,我们只需输出加密后的密文结果。

# 输出结果
print(f"加密后的密文是: {ciphered_text}")

解释:使用print()函数显示加密后的结果。

完整代码

将上述步骤整合后,我们的完整代码如下:

import string

# 输入明文和密钥
plaintext = input("请输入明文: ")
key = input("请输入密钥: ")

# 预处理:去掉空格,转换成大写
def preprocess(text):
    text = text.replace(" ", "").upper()  # 去掉空格并转换为大写
    return ''.join(filter(str.isalpha, text))  # 过滤非字母字符

# 处理明文和密钥
processed_plaintext = preprocess(plaintext)
processed_key = preprocess(key)

def vigenere_encrypt(plaintext, key):
    cipher_text = ""
    key_length = len(key)

    for i in range(len(plaintext)):
        # 获取当前明文字符和对应密钥字符
        p = ord(plaintext[i]) - ord('A')  # 明文字符的位移
        k = ord(key[i % key_length]) - ord('A')  # 密钥字符的位移
        # 加密字符
        c = (p + k) % 26  # 计算加密后字符的索引
        cipher_text += chr(c + ord('A'))  # 转换为字符并添加到密文

    return cipher_text

# 生成密文
ciphered_text = vigenere_encrypt(processed_plaintext, processed_key)

# 输出结果
print(f"加密后的密文是: {ciphered_text}")

结尾

通过以上步骤,你已经成功实现了一个简单的维吉尼亚密码加密算法。希望这篇文章能够帮助你理解如何使用Python进行基本的加密操作。你可以尝试扩展这个项目,比如增加解密功能或实现用户输入的更严格验证。如果你有任何问题,请随时提问,祝你编程愉快!