You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

维吉尼亚密码解密故障求助:解密结果无法正常输出

维吉尼亚密码解密问题排查

你的核心decrypt函数逻辑是正确的,解密功能失效的问题出在代码的交互流程上:当前代码会先自动加密你输入的初始消息,然后解密该密文,最后通过choice函数重复打印已生成的加密/解密结果——但如果你的需求是解密外部输入的密文,现有代码无法支持,因为choice函数没有提供输入新密文的入口,只会打印初始解密结果。

问题验证

假设你输入初始消息hello world、密钥abc,代码会自动生成密文khoor zruog并解密回原消息,此时无论是直接打印还是通过choice选2,都能正确输出解密结果。但如果你想解密其他密文(比如从别处获取的khoor zruog),现有代码无法处理,只能输出初始解密结果,导致你误以为解密功能失效。

修复方案

修改choice函数,让它支持动态输入消息/密文和密钥,实现真正的加密/解密交互:

def encrypt_key(message, key):    
    i = 0
    empty_key = ''
    for char in message:
        if char.isalpha():
            empty_key += key[i % len(key)]
            i += 1
        else: 
            empty_key += ' '
    return empty_key

def encrypt_decrypt(message_char, key_char, choice='encrypt'):
    if message_char.isalpha():
        first_alphabet_letter = 'a'
        if message_char.isupper():
            first_alphabet_letter = 'A'

        original_char_position = ord(message_char) - ord(first_alphabet_letter)
        key_char_position = ord(key_char.lower()) - ord('a')

        if choice == 'encrypt':
            new_char_position = (original_char_position + key_char_position) % 26
        else:
            new_char_position = (original_char_position - key_char_position + 26) % 26
        return chr(new_char_position + ord(first_alphabet_letter))
    return message_char

def encrypt(message, key):
    cipher = ''
    empty_key = encrypt_key(message, key)
    for message_char, key_char in zip(message, empty_key):
        cipher += encrypt_decrypt(message_char, key_char)
    return cipher

def decrypt(cipher, key):
    message = ''
    empty_key = encrypt_key(cipher, key)
    for cipher_char, key_char in zip(cipher, empty_key):
        message += encrypt_decrypt(cipher_char, key_char, 'decrypt')
    return message

def choice():
    while True:
        try:
            user_choice = int(input('''
Enter your choice (1, 2 or 3):

1. Encrypt a new message
2. Decrypt a new cipher
3. Exit

>  '''))
            if user_choice == 1:
                message = input('Enter your message to encrypt here: ')
                key = input('Enter your key: ')
                cipher = encrypt(message, key)
                print(f'\nCipher: {cipher}\n')
            elif user_choice == 2:
                cipher = input('Enter your cipher to decrypt here: ')
                key = input('Enter your key: ')
                decrypt_message = decrypt(cipher, key)
                print(f'\nDecrypted: {decrypt_message}\n')
            elif user_choice == 3:
                print('Exiting...')
                break
            else:
                print('\nInvalid choice, please enter 1, 2 or 3\n')
        except ValueError:
            print('\nPlease enter a valid number\n')

choice()

修复说明

  1. 移除了初始自动加密/解密的代码,改为通过choice函数触发交互
  2. 为choice函数添加了循环和输入校验,支持重复操作
  3. 加密/解密功能保留原有正确逻辑,仅调整交互流程

内容的提问来源于stack exchange,提问作者Astivery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:50:26