【问题标题】:c# encrypt xml filec#加密xml文件
【发布时间】:2010-10-25 18:15:24
【问题描述】:

告诉我加密 XML 文件的最简单方法。它是用于某些配置的文件,不希望人们随意使用它。安全不是问题,因为它是私有工具。

【问题讨论】:

  • 如果它是一个私人工具,你想保护谁的文件?你自己? :P
  • 哈哈,好问题。只是为了让人们不要碰他们不应该碰的东西。
  • 您可以使用标准的 app.config(或 web.config)文件还是必须是单独的 XML 文件?
  • 必须是 XML 文件
  • C# Encrypt an XML File.的可能重复

标签: c# xml encryption


【解决方案1】:

如果您不关心安全性,只需将文件与哈希一起保存即可。即:

你的.xml 和 你的.xml.hash

例如,您可以使用 System.Security.Cryptography.MD5Managed。它只是保存xml文件,然后保存文件本身的哈希。读取时,只需计算哈希值,与保存的内容进行比较,然后正常使用您的 xml 文件。

当然,xml 文件中的信息没有加密,是可以读取的,但是如果您编辑文件,那么哈希值将不正确,您的程序会发现该尝试。保持简单:)

【讨论】:

  • +1 。这很受欢迎。不过,通常您会希望以某种任意方式稍微修改哈希值,以使逆向工程变得更加棘手。
  • 同意,但我对此有所保留。最有可能的是,想要搞砸事情的用户不知道如何创建一个新的哈希;)如果用户真的有知识,那么,好吧..从禁用对用户的写访问开始,他们为什么要这样做对配置文件有写权限吗? :)
【解决方案2】:

如果您只是想让修改更加困难,请通过DeflateStream 发送。作为一个额外的好处,文件会更小。

【讨论】:

    【解决方案3】:

    DPAPI 是保护 Windows 系统中内容的最简单方法 - 请参阅 ProtectedData.Protect 了解初学者。

    【讨论】:

      【解决方案4】:

      在读/写之前,我可能只是通过这个封装了 DPAPI 的类运行整个文件。生成的输出经过编码,因此可以作为文本文件写出:

      using System;
      using System.Security.Cryptography;
      using System.Text;
      
      /// <summary>
      /// used for encryption and decryption
      /// </summary>
      public static class DataProtector
      {
         private const string EntropyValue = "secret";
      
         /// <summary>
         /// Encrypts a string using the DPAPI.
         /// </summary>
         /// <param name="stringToEncrypt">The string to encrypt.</param>
         /// <returns>encrypt data</returns>
         public static string EncryptData(string stringToEncrypt)
         {
            byte[] encryptedData = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
            return Convert.ToBase64String(encryptedData);
         }
      
         /// <summary>
         /// Decrypts a string using the DPAPI.
         /// </summary>
         /// <param name="stringToDecrypt">The string to decrypt.</param>
         /// <returns>decrypted data</returns>
        public static string DecryptData(string stringToDecrypt)
         {
            byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
            return Encoding.Unicode.GetString(decryptedData);
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-08
        • 1970-01-01
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        • 1970-01-01
        相关资源
        最近更新 更多