9.CSharp类对象相关-二进制数据加密
9.1 知识点
何时加密?何时解密?
当我们将类对象转换为二进制数据时进行加密。
当我们将二进制数据转换为类对象时进行解密。
这样如果第三方获取到我们的二进制数据,当他们不知道加密规则和解密秘钥时就无法获取正确的数据,起到保证数据安全的作用。
加密是否是100%安全?
- 一定记住加密只是提高破解门槛,没有100%保密的数据。
- 通过各种尝试始终是可以破解加密规则的,只是时间问题。
- 加密只能起到提升一定的安全性。
常用加密算法
MD5算法
SHA1算法
HMAC算法
AES/DES/3DES算法
等等等
有很多的别人写好的第三发加密算法库,可以直接获取用于在程序中对数据进行加密。这里我们不深究,感兴趣的同学可以自己去了解。
用简单的异或加密感受加密的作用
注意:两次异或操作会使得原始值恢复
// 创建一个名为person1的Person对象实例
Person person1 = new Person();
// 定义一个名为key的byte变量,并赋值为199
byte key = 199;
// 使用using语句块创建一个名为memoryStream的MemoryStream对象实例
using (MemoryStream memoryStream = new MemoryStream())
{
// 创建一个BinaryFormatter对象实例
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 将person1对象序列化到memoryStream中
binaryFormatter.Serialize(memoryStream, person1);
// 获取memoryStream中的字节数组
byte[] bytes = memoryStream.GetBuffer();
// 对字节数组进行异或加密
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] ^= key;
}
// 将加密后的字节数组写入文件
File.WriteAllBytes(Application.dataPath + "/Lesson09_CSharp类对象相关_二进制数据加密.linwentao", bytes);
}
// 解密
// 从文件中读取字节数组
byte[] bytes2 = File.ReadAllBytes(Application.dataPath + "/Lesson09_CSharp类对象相关_二进制数据加密.linwentao");
// 对字节数组进行异或解密
for (int i = 0; i < bytes2.Length; i++)
{
bytes2[i] ^= key;
}
// 使用using语句块创建一个名为memoryStream的MemoryStream对象实例,并传入解密后的字节数组
using (MemoryStream memoryStream = new MemoryStream(bytes2))
{
// 创建一个BinaryFormatter对象实例
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 从memoryStream中反序列化出一个Person对象,并将其赋值给person2变量
Person person2 = binaryFormatter.Deserialize(memoryStream) as Person;
// 关闭memoryStream
memoryStream.Close();
}
9.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
public class Lesson09_CSharp类对象相关_二进制数据加密 : MonoBehaviour
{
void Start()
{
#region 知识点一 何时加密?何时解密?
//当我们将类对象转换为2进制数据时进行加密
//当我们将2进制数据转换为类对象时进行解密
//这样如果第三方获取到我们的2进制数据
//当他们不知道加密规则和解密秘钥时就无法获取正确的数据
//起到保证数据安全的作用
#endregion
#region 知识点二 加密是否是100%安全?
//一定记住加密只是提高破解门槛,没有100%保密的数据
//通过各种尝试始终是可以破解加密规则的,只是时间问题
//加密只能起到提升一定的安全性
#endregion
#region 知识点三 常用加密算法
//MD5算法
//SHA1算法
//HMAC算法
//AES/DES/3DES算法
//等等等
//有很多的别人写好的第三发加密算法库
//可以直接获取用于在程序中对数据进行加密
//这里我们不深究 感兴趣的同学可以自己去了解
#endregion
#region 知识点四 用简单的异或加密感受加密的作用
// 创建一个名为person1的Person对象实例
Person person1 = new Person();
// 定义一个名为key的byte变量,并赋值为199
byte key = 199;
// 使用using语句块创建一个名为memoryStream的MemoryStream对象实例
using (MemoryStream memoryStream = new MemoryStream())
{
// 创建一个BinaryFormatter对象实例
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 将person1对象序列化到memoryStream中
binaryFormatter.Serialize(memoryStream, person1);
// 获取memoryStream中的字节数组
byte[] bytes = memoryStream.GetBuffer();
// 对字节数组进行异或加密
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] ^= key;
}
// 将加密后的字节数组写入文件
File.WriteAllBytes(Application.dataPath + "/Lesson09_CSharp类对象相关_二进制数据加密.linwentao", bytes);
}
// 解密
// 从文件中读取字节数组
byte[] bytes2 = File.ReadAllBytes(Application.dataPath + "/Lesson09_CSharp类对象相关_二进制数据加密.linwentao");
// 对字节数组进行异或解密
for (int i = 0; i < bytes2.Length; i++)
{
bytes2[i] ^= key;
}
// 使用using语句块创建一个名为memoryStream的MemoryStream对象实例,并传入解密后的字节数组
using (MemoryStream memoryStream = new MemoryStream(bytes2))
{
// 创建一个BinaryFormatter对象实例
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 从memoryStream中反序列化出一个Person对象,并将其赋值给person2变量
Person person2 = binaryFormatter.Deserialize(memoryStream) as Person;
// 关闭memoryStream
memoryStream.Close();
}
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com