[英]How do I encrypt/decrypt the same xml file in C#?
因此,我需要能够对应用程序中的相同设置XML文件进行加密/解密。 我只能找到使用单独输出文件的示例。 我不需要输出文件。 没有什么超级安全的。 我只需要基本上使设置文件不可读即可保护一对连接字符串。 我可以使用以下代码对文件进行加密:
public static void EncryptAndSerialize(Object obj)
{
UnicodeEncoding aUE = new UnicodeEncoding();
byte[] key = aUE.GetBytes("password");
RijndaelManaged RMCrypto = new RijndaelManaged();
using (FileStream fs = File.Open(@"D:\Sample.xml", FileMode.Create))
{
using (CryptoStream cs = new CryptoStream(fs, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write))
{
XmlSerializer xmlser = new XmlSerializer(obj.GetType());
xmlser.Serialize(cs, obj);
}
fs.Close();
}
我只需要知道如何使用相同的过程来解密相同的文件。 如果有人能指出我正确的方向,将不胜感激。 请记住,超安全性不是问题。 原谅我的无知,这项任务对我来说是新的。
这样的事情。 请注意,这会使用CryptoStreamMode.Read标志调用CreateDecryptor,告诉它从流中读取。
var decryptor = new RijndaelManaged ();
var transformer = decryptor.CreateDecryptor(_decryptKey, _decryptSeed);
var cryptoStream = new CryptoStream(encryptedStream, transformer, CryptoStreamMode.Read);
cryptoStream.CopyTo(resultStream);
resultStream.Close();
一些社论评论:
1)AES会更好,这就是原因: https : //blogs.msdn.microsoft.com/shawnfa/2006/10/09/the-differences-between-rijndael-and-aes/
2)不要小看.net加密-Microsoft不会四处走动
3)错误的加密可能比没有加密更糟糕,因为它提供了错误的安全感
他说的话加上... MemoryStream ...
https://msdn.microsoft.com/zh-CN/library/system.io.memorystream(v=vs.110).aspx
using (var sink = new MemoryStream())
{
// Write your encyphered data to the sink
// (from your FileStream, via the encryption provider)
// and then later, read (or copy) from sink back into
// the FileStream. Don't forget to re-position your
// FileStream before doing so.
}
如果是我,我将使用两个独立的FileStreams。 一个用于只读,然后另一个用于写回.xml文件(您刚刚从中读取)。 I knew I had a fully formed/filled sink. 我知道我有一个完全成型/填充的水槽时,我才打扰构造和编写后者。
您可能还会调查SecureString的用法(但我在讲题):
https://msdn.microsoft.com/zh-CN/library/system.security.securestring(v=vs.110).aspx
所有这些,您永远都不想直接覆盖文件(即,就地编辑)。 如果这样做,并且写入失败(在整个过程中失败),那么原始文件将很可能损坏。 留下zip / nadda /胡扯。 do you promote the temp file to the source path (typically via FileInfo.MoveTo). 始终写入新的临时文件, 将临时文件提升到源路径(通常通过FileInfo.MoveTo)。
https://msdn.microsoft.com/zh-CN/library/system.io.fileinfo.moveto(v=vs.110).aspx
如果一路发生坏事(而且将会发生!!!),您要做的就是删除临时文件(不包含catch块等),然后您便回到了起点。
人类不会知道您实际上在处理两个文件(并且,如果您的一些显示器自动化被串联文件绊倒了,那么请重写它,这样很好,废话)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.