序列化加密C#



i使用序列化函数将对象保存到硬盘上,以下代码:

using (FileStream fs = new FileStream(fileName, FileMode.Create))
                    new BinaryFormatter().Serialize(fs, myObject);

然后,我在需要时再次重新加载它:

using(FileStream fs = new FileStream(fileName, FileMode.Open))
                    myObject = (Templates)new BinaryFormatter().Deserialize(fs);

我正在搜索一种简单的方法来加密我保存的文件以保护它和快速的方式,因为保存和读取文件的时间因素非常重要。

请提前任何建议,谢谢!

在这里,我做了一个简单的独立程序。CS示例有关如何加密和解密数据:

using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
using System.Text.Json;
var fileName = "testfile.txt";
if(!File.Exists(fileName)) {
    File.WriteAllText(fileName, "Hello World!");
}
// generate random key and iv
var key = new byte[32];
var iv = new byte[16];
using (var rng = RandomNumberGenerator.Create()) {
    rng.GetBytes(key);
    rng.GetBytes(iv);
}
var aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
var data = File.ReadAllBytes(fileName);
// Save
using (FileStream fs = new FileStream(fileName + ".encrypted", FileMode.Create)) {
    using (CryptoStream cs = new CryptoStream(fs, aes.CreateEncryptor(), CryptoStreamMode.Write)) {
        await cs.WriteAsync(data, 0, data.Length);
    }
}
// Load
using (FileStream fs = new FileStream(fileName + ".encrypted", FileMode.Open)) {
    using (CryptoStream cs = new CryptoStream(fs, aes.CreateDecryptor(), CryptoStreamMode.Read)) {
        // get data from encrypted file and write a new file
        using (FileStream fs2 = new FileStream(fileName + ".decrypted", FileMode.Create)) {
            await cs.CopyToAsync(fs2);
        }
    }
}

您可以使用任何其他算法,只要它可以返回 ICrytoTransform,例如 aes.CreateEncryptor()方法(从 SymmetricAlgorithm继承)

另外,我在2023年进行编辑(最初发布于2017年),我强烈建议使用JSON Serialization而不是二进制Formatter

最新更新