我有超过30 000行的大型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 :(得分:1)
使用.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();
}
key
和vector
是{[3}}和RijndaelManaged.CreateEncryptor()方法所期望的byte []数组...
key
和vector
值最终将成为您的客户端应用代码的一部分,因此隐藏值和混淆将仅保护非软化攻击者,但如果您只需要隐藏来自非技术最终用户的xml内容可能就足够了......
答案 1 :(得分: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);
}
}