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

Java编写仿射密码暴力破解程序输出异常问题求解

问题修复方案

根本原因

解密计算环节的括号优先级错误,导致b值错误作用在字符ASCII码而非字母表索引上:
原代码中alphabet.indexOf((str.charAt(k)) - j)的写法是先将字符的ASCII值减b(即变量j),再查找对应的字母表索引。当b值增大后,str.charAt(k) - j的结果会超出小写字母的ASCII范围,indexOf直接返回-1,后续运算就会持续得到对应字符z的索引25,这就是输出逐渐被单一字母占满的原因。

需修正的两处错误

  • 调整解密公式的计算顺序:先取字符在字母表中的索引,再减去b值
  • 修正b值的循环范围:b的合法取值是0~25,原循环j < 25遗漏了b=25的情况

修正后的核心代码

// 把原来的解密计算行替换为以下逻辑
int y = alphabet.indexOf(str.charAt(k));
int aInv = MultiInverse.modInverse(aValues[i], 26);
int num = Math.floorMod(aInv * (y - j), 26);
insert.append(alphabet.charAt(num));

// b值循环调整为
for (int j = 0; j < 26; j++) {

修正后运行即可得到你预期的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:02