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

如何让大小写字母在维吉尼亚密码中等效?Python实现问题

维吉尼亚密码大小写兼容问题修复

你的代码核心问题是未统一处理输入的大小写,直接使用字符原始ASCII值计算偏移,导致小写字母(ASCII值远高于大写)参与运算时结果完全偏离预期。要实现不管明文/关键词是大写、小写还是混合输入,都输出正确的大写密文,可按以下方式修改:

问题根源

  • 小写字母的ASCII值(如h=104)与大写字母(如H=72)差值达32,直接用ord(string[i])计算会导致基础偏移值错误
  • 关键词的大小写同样会干扰偏移量(如a=97,A=65,两者的字母位置差了32)

修复后的代码

def generateKey(string, key): 
    key = list(key.upper())  # 统一将关键词转为大写
    if len(string) == len(key): 
        return("".join(key)) 
    else: 
        for i in range(len(string) - len(key)): 
            key.append(key[i % len(key)]) 
    return("".join(key)) 

def encryption(string, key): 
    encrypt_text = [] 
    for i in range(len(string)): 
        # 明文字符转大写,计算其在字母表的索引(A=0)
        plain_pos = ord(string[i].upper()) - ord('A')
        # 关键词字符转大写,计算偏移量
        key_pos = ord(key[i].upper()) - ord('A')
        # 计算加密后位置并转回大写字母
        encrypted_pos = (plain_pos + key_pos) % 26
        encrypt_text.append(chr(encrypted_pos + ord('A'))) 
    return("".join(encrypt_text)) 

string = input("Enter the message: ")
keyword = input("Enter the keyword: ")
key = generateKey(string, keyword) 
encrypt_text = encryption(string, key) 
print("Encrypted message:", encrypt_text) 

修改说明

  1. generateKey函数中先将关键词转为大写,确保扩展后的关键词格式统一
  2. encryption函数中:
    • 对每个明文字符先转大写,再计算0-25的字母索引,消除输入大小写的影响
    • 关键词字符同步转大写计算偏移量,避免小写关键词导致的错误
    • 最终结果统一输出大写,匹配你期望的HFNLP格式

测试验证:

  • 输入hello+ABC → 输出HFNLP
  • 输入Hello+abc → 输出HFNLP
  • 输入hello+abc → 输出HFNLP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:30:54