我需要防止某些孩子修改json文本文件并将“ fartface”放入其中。 我当前的代码从文本文件中获取一个字符串,如下所示:

using (StreamReader file = File.OpenText(basePath + "jsontxt"))
{
    string s = file.ReadToEnd();

我可以对我的jsontxt文件应用XOR,这足以防止恶意放屁的笑话,但是在我的wpf C#应用程序中,我不确定如何将字节XOR读入字符串中。

===============>>#1 票数:4

尝试将字符串作为字节数组获取,然后简单地对每个字节与某个秘密密钥进行XOR:

Byte[] byteString;
using (StreamReader file = File.OpenText(basePath + "jsontxt"))
{
   Byte secretByte = 125;
   string s = file.ReadToEnd();
   byteString = Encoding.UTF8.GetBytes(s);
   foreach(Byte b in byteString)
   {
      b ^= secretByte;
   }
}
//here save stream

===============>>#2 票数:1

我看到这个想法有两个问题。

首先,您会发现很难提出一个XOR值,该值在应用时将始终产生可读的字符。 在这种情况下,您的文件将成为二进制文件,而不是文本文件。

其次,假设您可以想出一种方法来保证文件的可读性,但这并不会阻止人们对其进行修改。

如果要加密文件,请使用真正的加密技术。 或者至少将您的字符串转换为字节数组,对字节进行XOR,然后将文件写入二进制文件。 要读回它,请将文件作为二进制文件读入byte[] (即File.ReadAllBytes )中,对字节进行XOR,然后将该字节缓冲区转换为字符串。

===============>>#3 票数:1

您应该使用System.IO.CryptoStream (Microsoft的流装饰器)来读取/写入加密的流。 简单!

要读取加密的文本,类似以下内容即可:

static IEnumerable<string> ReadEncryptedTextFile( string path , byte[] key , byte[] iv , Encoding encoding )
{
  string value ;
  using ( Stream s = File.OpenRead(path) )
  using ( SymmetricAlgorithm algorithm = SymmetricAlgorithm.Create() )
  using ( ICryptoTransform transform = algorithm.CreateDecryptor( key , iv ) )
  using ( CryptoStream cs = new CryptoStream( s , transform , CryptoStreamMode.Read ) )
  using ( TextReader sr = new StreamReader(cs,encoding))
  {
      string line ;
      while ( null != ( line = sr.ReadLine() ) )
      {
          yield return line ;
      }
  }
}

要编写加密的文本,如下所示:

static void WriteEncryptedTextFile ( IEnumerable<string> lines , string path , byte[] key , byte[] iv , Encoding encoding )
{
  using ( Stream             s         = File.OpenWrite(path) )
  using ( SymmetricAlgorithm algorithm = SymmetricAlgorithm.Create() )
  using ( ICryptoTransform   transform = algorithm.CreateEncryptor( key , iv ) )
  using ( CryptoStream       cs        = new CryptoStream( s , transform , CryptoStreamMode.Write ) )
  using ( TextWriter         tw        = new StreamWriter( cs , encoding ) )
  {
    foreach ( string line in lines )
    {
      tw.WriteLine( line ) ;
    }
  }
  return ;
}

您可能需要拨入您使用的特定算法(并且每个算法都有关于keyiv大小的要求)。

===============>>#4 票数:-1

我假设您正在尝试实施某种类型的验证,以确保未修改文件。 为什么不只获取字符串的哈希码并进行检查呢?

using (StreamReader file = File.OpenText(basePath + "jsontxt"))
{
    string s = file.ReadToEnd();
}
if (verificationCode != s.GetHashCode())
{
    // Malicious fart joke eminent!
}

通过在文件目录上运行Powershell脚本,可以轻松生成您的verifyCodes。 。

$files = Get-Item "C:\test\*.js"

foreach ($file in $files)
{
    $text = Get-Content $file
    $file.BaseName +" "+ $text.GetHashCode()
}

  ask by translate from so

未解决问题?本站智能推荐:

1回复

将许多文本文件读入字符串C#的数组

我正在尝试以下代码将大量文本文件读取为字符串数组 我可以一次使用StreamRreader执行相同的过程吗? 有什么更好的办法吗?
2回复

用C#在文本文件中写入字符串数据的字节格式的问题

我有一个本地存储的文本文件。 我想在那里以二进制格式存储字符串数据,然后再次检索数据。 在以下代码段中,我完成了转换。 在AppSettings.dat文件中,字节以以下方式写入 但是,当我在字节数组中分配了一些随机值并使用BinaryWriter将其保存在文件中时,就像在下
3回复

如何在C#中的文本文件中搜索字符串

我正在处理文本文件。.我想知道如何在文本文件中搜索字符串,然后对该字符串执行操作。我已经编写了代码,但是当特定字符串时,“ 如果条件 ”存在一些问题来,控件跳到下一行。.它不对该字符串执行任何操作。.下面是文本文件中的行,我正在尝试从该文件中找到“ MerchantNo:105838015”,然
1回复

将字符串写入文本文件-C#

我正在尝试通过用户输入将ip和端口写入文本文件。 但是,下面的代码仅保存部分创建的字符串。 我用来编写的代码: 我用来调用命令的代码 例如,如果我输入“ 192.168.2.60:8080”,我得到的回报是“ 192.168.2.6”被保存。 关闭文件解决了该问题
2回复

在大文本文件C#中搜索字符串模式

我一直在尝试在大型文本文件中搜索字符串模式。 我正在逐行阅读并检查每条导致大量时间的行。 我确实尝试了HashSet和ReadAllLines 。 HashSet<string> strings = new HashSet<string>(File.ReadAllLi
3回复

在文本文件C#中查找相似的字符串

我有一个文本文件,其中包含: 记忆测试 测试结果:通过 视频测试 测试结果:通过 音频测试 测试结果:失败 如果所有测试结果均为通过,则需要返回“ true”,如果一个或多个测试结果为“失败”,则需要返回“ false”。 谢谢。
5回复

c#替换文本文件中的字符串

我想在文本文件中替换字符串。 我使用以下代码: 它不仅将“播放”改为“123”,还将“显示”改为“dis123” 如何解决这个问题?
3回复

如何在C#中从文本文件设置字符串

我有一个始终只有一行的文本文件,如何在C#中为文本文件的第一行设置一个字符串? 例如,test.txt中的line1 =字符串版本
4回复

C#从文本文件中读取字符串

对于你们来说,这可能是一个简单的例子……我有一个ViewModel类,该类生成一个字符串集合,以后将其绑定到我的UI。 我想更改逻辑,以便它不是手动输入字符串,而是从.txt文件中读取它们(因此,我给它提供了一个文件路径,并从该文件中读取了单词)。 谁能提供快速的解决方案? 非常感谢-本
2回复

如何将日期字符串从文本文件解析为List对象C#

我试图将日期解析为文本文件中带有2个字符串的对象列表。 我有一个比Date的字符串和同一行中文本文件中的另一个字符串。 像下面 我尝试执行以下操作以获取DateTime,但我不断收到错误 无法将字符串识别为有效的DateTime。 我的密码