C#使用二维数组实现列序加密时如何正确格式化输出?
6x6矩阵置换加密代码修复
原代码问题
- 缺少输入长度适配:输入字符不足36位时会触发数组索引越界,超过36位时也会报错
- 输出逻辑不符合加密规则:没有按要求逐列遍历二维数组,直接输出
char[,]类型无法得到正确密文
修复说明
- 先对输入做适配:超过36位截断前36位,不足36位末尾补空格占位
- 逐行填充6x6数组后,外层遍历列、内层遍历行读取字符,拼接得到密文
完整可运行代码
using System; using System.Text; class EncryptProgram { static void Main() { char[,] encrypter = new char[6, 6]; string message; int count = 0; Console.Write("请输入需要加密的消息:"); message = Console.ReadLine(); // 适配输入长度,满足6*6=36位要求 if (message.Length > 36) { message = message.Substring(0, 36); } else { message = message.PadRight(36, ' '); } char[] messageToEncrypt = message.ToCharArray(); // 逐行写入二维数组 for (int r = 0; r < 6; r++) { for (int c = 0; c < 6; c++) { encrypter[r, c] = messageToEncrypt[count]; count++; } } // 按列读取拼接加密结果 StringBuilder encryptedSb = new StringBuilder(); for (int c = 0; c < 6; c++) { for (int r = 0; r < 6; r++) { encryptedSb.Append(encrypter[r, c]); } } Console.WriteLine($"加密后结果:{encryptedSb.ToString().TrimEnd()}"); } }
内容的提问来源于stack exchange,提问作者Nobody
相关产品推荐
相关产品推荐

