Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#建议将文本写入文件的最佳方式,以便在记事本中打开时用户无法理解_C#_Encryption_Text - Fatal编程技术网

C#建议将文本写入文件的最佳方式,以便在记事本中打开时用户无法理解

C#建议将文本写入文件的最佳方式,以便在记事本中打开时用户无法理解,c#,encryption,text,C#,Encryption,Text,寻找将字符串写入文件的简单方法的建议,以使生成的文件在记事本中不可读/不可编辑。我曾想过使用一些严肃的加密技术,但我认为这对于我所需要的东西来说太过分了。只是寻找一个简单的不可读的文本格式转换和从 使用二进制格式化程序将其序列化如何 这将很好地确保在记事本中打开文件的人最终只会得到GobbleDeBook。但是(不得不说)如果你重视人们看不到或弄乱这些数据,就需要对其进行真正的加密。谷歌将其翻译成法语,然后再翻译回来。如果您的用户说法语,这将不起作用。如果不需要加密,那么我建议使用Convert

寻找将字符串写入文件的简单方法的建议,以使生成的文件在记事本中不可读/不可编辑。我曾想过使用一些严肃的加密技术,但我认为这对于我所需要的东西来说太过分了。只是寻找一个简单的不可读的文本格式转换和从

使用二进制格式化程序将其序列化如何


这将很好地确保在记事本中打开文件的人最终只会得到GobbleDeBook。但是(不得不说)如果你重视人们看不到或弄乱这些数据,就需要对其进行真正的加密。

谷歌将其翻译成法语,然后再翻译回来。如果您的用户说法语,这将不起作用。

如果不需要加密,那么我建议使用Convert.ToBase64String/Convert.FromBase64String


简单可靠。

加密,或者编码(例如Base64编码?——或者更简单的编码?)。这将使其不可读,但仍可编辑。

您可以对其进行Base64编码:

 string text = "My quasi secret text.";

 byte[] buffer = System.Text.UTF8Encoding.GetBytes(text);

 string protectedText = Convert.ToBase64String(buffer);

 File.WriteAllText(filename, protectedText)

编辑:更新为UTF8Encoding以处理unicode。

超级简单的功能是:

Convert.ToBase64String()
根据定义,您正在尝试加密数据。唯一的区别是你只需要一个足够强大的加密,不允许外行访问它的内容


正如其他人所提到的,使用Base64可以有效地针对普通用户加密数据。

因此,最后我就是这么做的

要写入数据,请执行以下操作:

            //Write the text in a way the user wont recognize if they open the file in notepad.
            byte[] buffer = System.Text.ASCIIEncoding.UTF8.GetBytes(data);
            string protectedText = Convert.ToBase64String(buffer);
            File.WriteAllText(UserToUserLevelDataFile, protectedText);
            string longText = File.ReadAllText(UserToUserLevelDataFile);
            data = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(longText));
要读取数据:

            //Write the text in a way the user wont recognize if they open the file in notepad.
            byte[] buffer = System.Text.ASCIIEncoding.UTF8.GetBytes(data);
            string protectedText = Convert.ToBase64String(buffer);
            File.WriteAllText(UserToUserLevelDataFile, protectedText);
            string longText = File.ReadAllText(UserToUserLevelDataFile);
            data = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(longText));

很有魅力,谢谢大家的创意

奇怪的问题…你们真的可以打开记事本上的任何文件,所以也许你们应该把你们的问题弄清楚。如果您试图混淆文件中的数据,那么加密可能是您唯一的选择。您所说的是加密,即使它是以一种简单的方式完成的。您可以执行一些愚蠢的加密,例如按位大小/2旋转所有字符。@Mehrdad在我看来并不奇怪,听起来OP只是想防止用户把app.config搞砸,而@Tony Casale只有在他以某种方式加密的情况下才是加密。将其转换为Base64并不是对其进行加密,而是对其进行模糊处理,类似于将其存储为二进制文件。你不是在加密它,而是在用标准文本编辑器对它进行模糊处理。MD5对字符串进行哈希运算,然后根据彩虹表运行结果以找到匹配的输入,然后使用web服务打电话告诉你答案?不担心真正的黑客,只担心普通用户的阅读和更改。谢谢,这会有用的。+1如果你不想让文件直接可读,那么这是正确的选项。我认为这是一个选项,而不是选项。谢谢,我也可以这样做。@Chris Marisic:什么,你不喜欢法语?很有趣,但我不想将文本转换成另一种语言。但这是一个很好的开箱即用的想法。谢谢。我喜欢这个,我想这就是我要做的。我不担心编辑,我只想告诉用户是否编辑了它。这应该使用Unicode编码而不是ASCII。你的权利,我应该用更好的措辞。感谢您的回复。您甚至可以在转换为Base64之前(或之后)应用ROT13,以进行更强大的模糊处理。