网站首页 > 基础教程 正文
快速加密的思路
此方法不算是真正的加密,只是可以防止别人打开使用你的文件,一般而言对于加密来说,加密的速度取决于文件的大小,加密的安全性取决于采用哪种加密算法,例如一个1G的文件不论是采用RSA加密还是AES加密,都不会速度快,你要先分段读取文件,然后加密段,然后再保存成文件,解密的时候也是同样的操作,时间上花费很大。
防止一般人读取你的文件,我们可以换个思路,就是通过二进制的方式读取文件,首先跳过文件开头的10个字节,这10个字节是文件类型、版本之类的,然后从第10个字节开始读取,不论是你读取128个字节还是256个字节,都是非常速度的,本来想着把读取出来的字节使用AES进行加密,再替换掉后保存,后来发现明文和密文的长度不一样长,无法快速的实现把比明文长的一段数据插入到二进制文件中,所以想要对文件中的部分内容进行加密就放弃了。
那就直接来个简单粗暴的方法,例如从第10个字节开始读取256个字节,然后把字节按位取反,再把取反的结果从第10个字节写入,这样长度是一致的,但是内容不致了,从而实现了不解密就无法打开文件,当然了,古典密码中例如希尔密码,就可以实现明文和密文一样长,但对于高手来说,古典密码和按位取反没啥区别[捂脸],但防止普通人是足够用了。
二进制读取和写入
//二进制文件读取
public static byte[] BitFile(string path)
{
long startPosition = 10; // 从文件的哪个位置开始读取,这里以10为例
long length = 256; // 需要读取的字节数
string res = "";
byte[] bytes;
// 打开文件流
using (FileStream fileStream = new FileStream(path, FileMode.Open))
{
// 设置文件流的起始位置
fileStream.Seek(startPosition, SeekOrigin.Begin);
// 创建二进制读取器
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
// 读取指定长度的二进制数据
bytes = binaryReader.ReadBytes((int)length);
}
}
return bytes;
}
//二进制文件写入
public static void WriteFile(string path, byte[] data)
{
long startPosition = 10; // 从文件的哪个位置开始读取,这里以10为例
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Write))
{
// 将文件指针移动到指定位置
fileStream.Seek(startPosition, SeekOrigin.Begin);
// 将数据写入文件
fileStream.Write(data, 0, data.Length);
fileStream.Close();
}
}
//byte[]按位取反
public static byte[] InvertBytes(byte[] bytes)
{
return bytes.Select(b => (byte)~b).ToArray();
}
读取和写入操作,由于读取和写入的字节数长度一致,写1m和写1G的没有区别
string mes = "";
string path = "D:\\11.mp4";
byte[] data = null;
//读取,查看读出来的数据
data = DB.BitFile(path);
mes =BitConverter.ToString(data);
listBox1.Items.Add(mes);
//按位取反,写入数据
byte[] d1 = InvertBytes(data);
DB.WriteFile(path, d1);
//再次读取,查看是否写入成功
data = DB.BitFile(path);
mes = BitConverter.ToString(data);
listBox1.Items.Add(mes);
效果
猜你喜欢
- 2024-12-02 C++中的struct完全可以被class替代,为什么不删去它呢?
- 2024-12-02 C#笔记~泛型
- 2024-12-02 C# 中 IsNullOrEmpty 和 IsNullOrWhiteSpace 你用对了吗?
- 2024-12-02 C#面试宝典 2022年 60个常见的C#面试问题和答案
- 2024-12-02 C#学习随笔—操作BIN文件(读,写,替代)
- 2024-12-02 C# 入门深度学习:万字长文讲解微积分和梯度下降
- 2024-12-02 344.C# 中的正则表达式:字符匹配、字面字符、特殊字符和转义序列
- 2024-12-02 C#移除字符串中的不可见Unicode字符
- 2024-12-02 使用 C# 解析月份简写的时间日期格式
- 2024-12-02 ILSpy借助reflexil修改C# DLL
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)