Java Cipher Columnar Transposition列置换密码解密异常排查
列置换密码解密代码修复方案
你的解密方法存在两处核心逻辑错误,修复方案如下:
错误说明
- 填充逻辑错误:加密逻辑为「明文按行填数组→按列读得到密文」,解密作为逆过程,需要「密文按列填数组→按行读得到明文」,原解密方法仍按行填充密文,逻辑完全反向。
- 拼接逻辑错误:原代码拼接解密结果时错误写入了入参
txt对象,最终返回的output始终为空字符串。
修复后代码
private static String decipherTrans(String txt, int num) { String output = ""; int num2 = (int) Math.ceil(txt.length() * 1.0 / num); char[][] buffer = new char[num2][num]; int k = 0; // 改为按列填充密文到二维数组 for (int j = 0; j < num; j++) { for (int i = 0; i < num2; i++, k++) { if (txt.length() > k) { buffer[i][j] = txt.charAt(k); } } } // 按行读取得到明文,同时过滤数组默认的空字符 for (int i = 0; i < num2; i++) { for (int j = 0; j < num; j++) { if (buffer[i][j] != '\u0000') { output += buffer[i][j]; } } } return output; }
验证结果
使用你给出的测试用例验证:输入明文my name is dani、列数为5,加密输出mm yed aninasi,解密后可正确还原原明文。
内容的提问来源于stack exchange,提问作者noobieCoder
相关产品推荐
相关产品推荐

