繁体   English   中英

如何在C#中加密/解密相同的xml文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM