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

基于明文密钥的Vigenere变种解密实现技术求助

变种维吉尼亚密码解密实现求助

我是一名数学家,编程能力有限,手里有一套常规的维吉尼亚加解密Python代码,现在想实现一种变种解密逻辑:密钥即为明文本身,已知密钥的首字母a₀,需要先用a₀解密出密钥的下一个字母a₁,再用a₁解密得到a₂,以此类推完成整个解密过程。举个实际例子:密文为JLPWZ,已知密钥首字母是Q,经过迭代解密后得到明文HELLO。

现寻求相关技术提示或帮助,我目前的代码如下(注:代码存在语法错误,暂无法正常运行):

from random import sample
from itertools import product as col

def generator(key, char, length):
    char_len = key.count(char)   
    key_piece = key[:length - char_len:]

# 原代码此处缩进错误,且字符串拼接语法有误
list_keys = [key_piece+''.join(i) for i in list(col([chr(i) for i in range(65, 65+26)], repeat=char_len))]
    return list_keys

def vigenere(x, key):
    lst_final = []
    code = list(x)
    j = 0
    for i, char in enumerate(code):
        if char.isalpha():
            code[i] = key[(i+j)%len(key)]
            # 原代码未将cifrar作为参数传入函数
            if cifrar:
                lst_final.append((ord(x[i]) + ord(code[i]) - 65 * 2) % 26)
            else:
                lst_final.append((ord(x[i]) - ord(code[i])) % 26)
        else:
            lst_final.append(ord(char))
            j -=1
    for i, char in enumerate(code):
        if char.isalpha():
            lst_final[i] = chr(lst_final[i] + 65)
        else:
            lst_final[i] = chr(lst_final[i])
    return ''.join(lst_final)

print("Bienvenido al cifrado Vigenere")
if input('Cifrar o Descifrar : ').lower() == 'cifrar':
    x = input('Ingrese el texto : ').upper()
    key = input('Ingrese la clave : ').upper()
    cifrar = True 
    print(vigenere(x, key))  
else:
    x = input('text : ').upper()
    cifrar = False
    if input('Tiene la clave? (y/n) : ') == "y":
        key = input('Ingrese la clave : ').upper()
        print(vigenere(x, key))

实现思路提示

  1. 先修正现有代码的语法错误:比如generator函数未闭合、list_keys缩进错误、vigenere函数未接收cifrar参数、字符串拼接的引号问题等,这些基础错误会导致代码无法运行。
  2. 变种解密的核心是逐字符迭代解密:
    • 第一步:用已知的密钥首字母解密密文的第一个字符,得到明文的第一个字符(也就是下一个密钥字符)。
    • 后续每一步:用上一步解密得到的明文字符作为当前密钥,解密对应位置的密文字符,依次循环直到所有密文处理完毕。
  3. 可以单独封装一个单字符的维吉尼亚解密函数,方便在迭代过程中调用,简化逻辑。
  4. 保留原代码中对非字母字符的处理逻辑,遇到非字母时直接保留,不参与解密流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:10:16