加密和解密xml文件内容

本文关键字:文件 xml 解密 加密 | 更新日期: 2023-09-27 18:24:01

我有一个超过30000行的大型xml文件。它有类似的内容

<?xml version="1.0"?>
   <Nodes>
      <Node>some node name </Node>
      <Node>some node name 2 </Node>
      ...
   </Nodes>

我想手动将这个带有加密内容的xml文件发送到客户端。客户端应用程序(wpf)将根据需要加载此文件并加密此文件,而无需用户干预(所有可能的密钥将在此客户端应用程序上预先定义)。

我应该使用什么方法来加密和解密xml文件内容?

我想用http://aspnettutorialonline.blogspot.com/2012/05/encryption-and-decryption-in-aspnet.html

但由于我在这个问题上没有太多经验,我想问这是一个好的解决方案,还是你会推荐其他东西?

加密和解密xml文件内容

AES加密使用.NET非常容易…

private readonly ICryptoTransform encryptor;
private readonly ICryptoTransform decryptor;
private readonly UTF8Encoding encoder;
var rm = new RijndaelManaged();
encryptor = rm.CreateEncryptor(key, vector);
decryptor = rm.CreateDecryptor(key, vector);
encoder = new UTF8Encoding();
public string Encrypt(string unencrypted)
{
    return Convert.ToBase64String(Encrypt(encoder.GetBytes(unencrypted)));         
}
public byte[] Encrypt(byte[] buffer)
{
    var encryptStream = new MemoryStream();
    using (var cs = new CryptoStream(encryptStream, encryptor, CryptoStreamMode.Write))
    {
        cs.Write(buffer, 0, buffer.Length);
    }
    return encryptStream.ToArray();
}

keyvector是RijndaelManaged.CreateEncryptor()和Rijndael Managed.CreateDecryptor()方法所期望的byte[]数组。。。

keyvector值最终将成为您的客户端应用程序代码的一部分,因此隐藏值和模糊处理只能抵御非易识别的攻击者,但如果您只需要向非技术最终用户隐藏xml内容,这可能就足够了。。。

.Net提供了许多加密系统。根据您的需要,您可以在DES、3DES、AES或RSA(在您的情况下这是有效的)之间进行选择。DES是最不安全的,3DES更好,但我会选择AES。加密:

using System.Security.Cryptography;
...
class AES {
   private AesCryptoServiceProvider aes;
   public AES (Byte[] IV, Byte[] Key) {
       aes = AesCryptoServiceProvider();
       aes.Key = Key; // 256 Bits Long
       // AES Key can be generated using SHA256
       aes.IV = IV; // 128 Bits Long
       // IV can be generated using MD5
   }
   public Byte[] Encrypt(Byte[] FileStream) {
       ICryptoTransform Transform = aes.CreateEncryptor();
       return Transform.TransformFinalBlock(FileStream, 0, FileStream.Lenght);
   }     
   public Byte[] Decrypt (Byte[] FileStream){
       ICryptoTransform Transform = aes.CreateDecryptor();
       return Transform.TransformFinalBlock(FileStream, 0, FileStream.Lenght);
  }
}