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

如何匹配密钥与明文1D数组字符到Vigenere密码2D矩阵实现加密

维吉尼亚密码矩阵匹配加密解决方案

核心实现逻辑

你提到的字符转数字索引的方案实际实现非常简便,Java中char类型本质是ASCII码数值,大写英文字母直接减去'A'即可直接得到0-25的对应索引,无需额外映射逻辑,仅需一行代码即可完成转换,完全不存在繁琐的问题。

你的arrayTabula矩阵第一维(行)对应密钥的Y轴,第二维(列)对应明文的X轴,直接通过索引取交叉值即可得到密文字符。

代码示例

假设你已经提前生成好维吉尼亚矩阵、等长密钥数组、明文字符数组,加密逻辑参考如下:

// 提前准备好的三个输入
char[][] vigenereMatrix = arrayMatrix();
char[] plainTextArray; // 读取txt得到的明文字符数组
char[] keyArray; // 扩展到和明文等长的密钥数组

// 生成密文数组
char[] cipherTextArray = new char[plainTextArray.length];
for (int i = 0; i < plainTextArray.length; i++) {
    // 密钥字符转Y轴行索引
    int yIndex = keyArray[i] - 'A';
    // 明文字符转X轴列索引
    int xIndex = plainTextArray[i] - 'A';
    // 直接取矩阵交叉点作为密文字符
    cipherTextArray[i] = vigenereMatrix[yIndex][xIndex];
}

效果验证

用你给出的示例验证:密钥首字符为R,R - 'A'得到行索引17;明文首字符为C,C - 'A'得到列索引2,取vigenereMatrix[17][2]即可得到密文首字符T,和预期结果一致。

其他方案说明

如果完全不想做字符转数值的操作,也可以通过遍历矩阵行首、列首匹配对应字符的方式定位位置,但该方案每个字符都要最多遍历26次找行、26次找列,时间复杂度远高于上述ASCII转换方案,没有实际使用必要。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:02