龙空技术网

C#通过二进制读写实现文件的伪加密

办公小技巧 369

前言:

眼前各位老铁们对“二进制string转int”大体比较看重,你们都需要知道一些“二进制string转int”的相关文章。那么小编在网上搜集了一些对于“二进制string转int””的相关内容,希望大家能喜欢,小伙伴们一起来学习一下吧!

快速加密的思路

此方法不算是真正的加密,只是可以防止别人打开使用你的文件,一般而言对于加密来说,加密的速度取决于文件的大小,加密的安全性取决于采用哪种加密算法,例如一个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);
效果

1G的视频文件写入前

读取,按位取反后写入

视频已无法播放

图片写入前

图片写入后

标签: #二进制string转int