在C#开发中,二进制序列化是一种将对象转换为字节流以便存储或传输的常用技术。然而,直接序列化敏感数据存在安全隐患。本文将手把手教你如何对C#二进制序列化的数据进行加密处理,保障你的应用数据安全。
二进制序列化是将对象的状态(字段、属性等)转换成二进制格式的过程,便于保存到文件、数据库或通过网络传输。反序列化则是将二进制数据还原为原始对象。
但问题来了:如果序列化的是用户密码、身份证号等敏感信息,未加密的二进制文件一旦被窃取,后果不堪设想。因此,我们需要在序列化前后加入加密环节。
在C#中,我们通常使用对称加密算法(如AES)来加密序列化后的数据。对称加密速度快、安全性高,非常适合本地数据保护。
下面是一个完整的C#示例,展示如何对对象进行二进制序列化并使用AES加密,以及如何解密并反序列化。
using System;using System.IO;using System.Security.Cryptography;using System.Runtime.Serialization.Formatters.Binary;[Serializable]public class UserInfo{ public string Name { get; set; } public string IdCard { get; set; }}public class SecureSerializer{ // 加密并序列化对象 public static void SerializeAndEncrypt(object obj, string filePath, byte[] key, byte[] iv) { // 1. 二进制序列化 BinaryFormatter formatter = new BinaryFormatter(); using (var ms = new MemoryStream()) { formatter.Serialize(ms, obj); byte[] serializedData = ms.ToArray(); // 2. AES加密 using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using (var encryptedMs = new MemoryStream()) using (var cryptoStream = new CryptoStream(encryptedMs, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(serializedData, 0, serializedData.Length); cryptoStream.FlushFinalBlock(); File.WriteAllBytes(filePath, encryptedMs.ToArray()); } } } } // 解密并反序列化对象 public static T DecryptAndDeserialize<T>(string filePath, byte[] key, byte[] iv) { byte[] encryptedData = File.ReadAllBytes(filePath); // 1. AES解密 using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV); using (var ms = new MemoryStream(encryptedData)) using (var cryptoStream = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) using (var resultMs = new MemoryStream()) { cryptoStream.CopyTo(resultMs); byte[] decryptedData = resultMs.ToArray(); // 2. 反序列化 BinaryFormatter formatter = new BinaryFormatter(); using (var dataMs = new MemoryStream(decryptedData)) { return (T)formatter.Deserialize(dataMs); } } } }}// 使用示例class Program{ static void Main() { // 生成密钥和IV(实际项目中应安全存储) using (Aes aes = Aes.Create()) { aes.GenerateKey(); aes.GenerateIV(); byte[] key = aes.Key; byte[] iv = aes.IV; var user = new UserInfo { Name = "张三", IdCard = "11010119900307XXXX" }; // 序列化并加密 SecureSerializer.SerializeAndEncrypt(user, "user.dat", key, iv); // 解密并反序列化 var restoredUser = SecureSerializer.DecryptAndDeserialize<UserInfo>("user.dat", key, iv); Console.WriteLine($"Name: {restoredUser.Name}, ID: {restoredUser.IdCard}"); } }} BinaryFormatter,因其存在反序列化漏洞。在生产环境中建议改用 System.Text.Json 或 MessagePack 等更安全的序列化方式,并配合加密。通过本文,你已经学会了如何在C#中对二进制序列化的数据进行加密处理,有效提升应用的数据安全水平。记住,安全无小事,即使是本地存储的数据也应加密保护。
如果你正在学习C#二进制序列化或构建需要数据持久化的应用,这套加密方案将为你打下坚实的安全基础。
关键词:C#二进制序列化、序列化加密、C#数据安全、二进制序列化教程
本文由主机测评网于2025-12-11发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126323.html