前言:
眼前各位老铁们对“二进制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);效果
标签: #二进制string转int