密码学:将字符串数组转换为单个字符串

本文关键字:字符串 单个 转换 数组 密码学 | 更新日期: 2023-09-27 18:37:10

我正在创建一个小型的宠物加密项目,正在从文本文件中读取文本,在数组中的每一行时对其进行修改,然后将其提交回其文本文件。问题是将字符串添加回文件,因为文本文件的当前文本只是按照程序现在的方式被删除。更具体地说,我想将数组中的所有字符串合并到一个字符串中,这就是我认为错误所在。这是我编写的代码。

static void Main(string[] args)
    {
        string[] getAllText = File.ReadAllLines("H:''BetaText.txt");
        File.WriteAllText("H:''BetaText.txt", string.Concat(Lock(getAllText)));
        System.Diagnostics.Process.Start("H:''BetaText.txt");
    }

Lock 只是我的程序中返回加密字符串数组的方法。确认文本文件已正确解析,并且修改返回确实按我想要的方式返回数组。这个问题仍然是我的字符串。Concat() 语句。我确实知道如何用多行语句解决这个问题,但我想避免这种情况并了解为什么 Concat() 语句没有按照我认为的方式工作。我也用过字符串。使用 " 分隔符连接方法。浏览StackOverflow,我没有看到这个答案,根据MSDN文档,我认为我不应该遇到这个问题。谢谢。

密码学:将字符串数组转换为单个字符串

您可以使用 String.Join 将字符串数组联接到单个字符串中。

String.Join ("", getAllText);

您也可以使用聚合

getAllText.Aggregate((c, n) => string.Format("{0}{1}", c, n);

使用聚合,您可以构造更复杂的示例。例如,这是用逗号分隔它们的方法

getAllText.Aggregate((c, n) => string.Format("{0}, {1}", c, n));

或者干脆用'","'连接。如果需要,请选择其他分隔符

 var writeText = string.Join(", ", Lock(getAllText).Select(v => v.ToString()));
 File.WriteAllText("H:''BetaText.txt", writeText);

因此,您正在做的是逐行读取文件string[]然后加密每一行,然后将这些行提交回文件中。

就个人而言,我认为您的方法是错误的(直觉,但这就是原因)

File.ReadAllLines通过使用换行符(Environment.NewLine"'r'n""'n" ...)拆分文件来创建数组 - 如果您的加密算法碰巧将某个特定字节加密为换行符会发生什么? - 突然间你的换行符不同 - 因此做相反的事情基本上会失败(我认为,因为解密文件"可能"使用不同的换行符)

更好的解决方案是:

byte[] unencryptedBytes = Encoding.UTF8.GetBytes(File.ReadAllText(filename));
byte[] encryptedBytes = Lock(unencryptedBytes);
File.WriteAllText(filename, Encoding.UTF8.GetString(encryptedBytes));

我知道这在技术上不是你所要求的(对不起) - 我只是有一种直觉,你正在做的事情可能不起作用。