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

Python实现ADFGVX加密结果与维基百科示例不符求助

ADFGVX加密实现结果不符问题排查

你的代码输出与维基百科标准结果不一致,存在3处核心错误:

  • 硬编码的双字符替换映射表keys_dictionary与测试用例使用的初始Polybius方阵完全不匹配。ADFGVX算法第一步的替换结果完全依赖6*6初始方阵,你当前写死的映射关系从根源上就是错的。
    维基百科该示例使用的初始方阵行、列标签固定为A/D/F/G/V/X顺序,方阵内容如下:
    ADFGVX
    ANA1C3H
    D8TB2OM
    FE5WRPD
    G4F6G7I
    V9J0KLQ
    XSUVXYZ
    例如明文字符t对应该方阵D行D列,替换结果应为DD,但你现有字典中t映射为GD,第一步输出就和正确值偏离。
  • 列换位阶段填充逻辑错误。当前逻辑在第一步输出长度无法被列密钥长度整除时,固定补两个字符XX,不符合ADFGVX的填充规则:正确逻辑是计算差值,缺几个字符补几个,不需要固定补双字符,也不能写死填充值为XX。
  • 缺少输入预处理逻辑。示例明文attack at 1200am包含的空格会被当前代码静默跳过,虽然不会直接导致该用例报错,但遇到其他特殊字符时会出现无提示的结果错误,加密前应当统一过滤所有非字母、非数字的字符,统一转为大写后再进入加密流程。
修正要点
  1. 删除硬编码的keys_dictionary,改为根据初始方阵动态生成字符与双字符编码的映射关系,测试该用例时直接使用上文给出的对应方阵生成映射即可得到正确的第一步替换结果。
  2. 修改stage_two加密分支的填充逻辑:计算需要补充的字符数为len(key) - (len(第一步输出) % len(key)),补充对应数量的字符直到总长度能被密钥长度整除即可。
  3. 在加密流程最开始增加预处理步骤,过滤输入中的无关字符,避免空格、标点等干扰结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:21:46