好的,我知道这已经被覆盖了几次,我在这里读了几篇关于加密算法和加密方法等的文章。但是现在我的头脑旋转,我仍然不确定我需要做什么。我有一组xml格式的数据需要保存到文件中。
它不是非常敏感(没有信用卡或任何东西),但我不希望用户只能打开它作为xml并进行编辑等。我真的不担心有人编程精通黑客的格式或反编译以找到键等。
我想要的是一个基本类,我可以传递一个字符串值(或XmlDocument,但你可以随时调用.OuterXml)和一个密钥,我将硬编码并获得一个加密值,我可以写入一个文件。然后,我需要能够从另一台机器(客户机/客户机)上的文件中读取并解密回我的程序要处理的xml字符串。同样,密钥可以硬编码到程序中,以便它们在两个位置都匹配......
此外,我不想向用户询问密码或类似内容,但如果有必要,我也可以将其硬编码到程序中。
有人能指点我这么简单吗?
答案 0 :(得分:1)
此链接会帮助您吗?您需要进一步修改网站中的示例代码以加密所有xml元素
http://msdn.microsoft.com/en-us/library/ms229746(v=vs.110).aspx
答案 1 :(得分:0)
总的来说,这就是你需要做的事情
Convert.ToBase64String()
对于一些示例代码:
对于第1步
private System.Security.Cryptography.SymmetricAlgorithm GetAesKey()
{
byte[] symKey = RandomNextBytes();
var aes = System.Security.Cryptography.SymmetricAlgorithm.Create();
aes.Key = symKey;
aes.IV = symKey;
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
return aes;
}
上面的代码每次调用时都会创建一个不同的aes密钥。 RandomNextBytes
只是一个随机创建16个字节的包装器。请注意,.NET本机随机不是线程安全的,因此如果您需要线程安全性查找Jon Skeet Thread-safe implementation。
您可能想要控制如果您想控制AES密钥,那么您可以拥有symKey
这样的
byte[] symKey = new byte[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
接下来的步骤将cypher逻辑包装成一个漂亮的方法
private string EncryptSymmetricToBase64(SymmetricAlgorithm symAlg, string plainText)
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, symAlg.CreateEncryptor(symAlg.Key, symAlg.IV), CryptoStreamMode.Write))
using (var sw = new StreamWriter(cs))
{
sw.Write(plainText);
}
string ciphered = Convert.ToBase64String(ms.ToArray());
return ciphered;
}
}
上面的代码选择了纯文本和密码算法。然后使用CryptoStream
加密字符串。
在返回之前,它将加密的byte []转换为base64字符串。
注意:Base64是一种众所周知的算法,可将二进制数据转换为字符串并返回。