簡體   English   中英

加密和解密xml文件內容

[英]encrypt and decrypt xml file content

我有超過3萬行的大型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

但是由於我在該主題上沒有太多經驗,所以我想問這是一個好的解決方案,還是您會建議其他建議?

NET可以很容易地進行AES加密...

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();
}

keyvectorRijndaelManaged.CreateEncryptor()RijndaelManaged.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);
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM