2014-09-22 173 views
0

我有超过30000行的大型XML文件。它有像内容加密和解密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

但因为我没有这个题材我问很多经验是这个很好的解决方案,或者您会推荐别的东西?

+0

你想要防范什么?如果密钥在应用程序中进行了硬编码,则有一组非常有用的场景。 – SLaks 2014-09-22 19:34:20

+0

@SLaks这个文件将随着时间的推移手动发送到客户端,这将由用户加载到应用程序,所以我不希望用户看到XML内容。 – user1765862 2014-09-22 19:36:16

+0

然后使用您发布的页面上使用的加密和解密方法。阅读**客户端**端的XML文件,并调用EncryptIt(yourXmlString)和**服务器**端调用DecryptIt(encryptedXmlString) – 2014-09-22 19:52:52

回答

1

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()RijndaelManaged.CreateDecryptor()方法阵列...

key的和vector值将最终成为您的客户端应用程序代码的一部分,因此隐藏这些值和模糊处理将仅保护非恶意攻击者,但如果您只需要从非技术最终用户隐藏xml内容就足够了。 。

0

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

}