文件校验工具的开发及问题
1.加密算法的熟悉
现在文件校验使用较多的是校验文件的MD5值和SHA1值,有些使用的还有CRC32,前些天微软发布了VisualStudio正式版,win10镜像,微软官方给出的校验方式都是校验文件的SHA1值
知道了如何进行普通字符串的加密还不够,我们要校验的文件的MD5值或SHA1值,接下来熟悉如何获取文件的MD5值和SHA1值
1 public static string GetFileMD5(string filePath) 2 { 3 MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 4 FileStream fs = FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read); 5 byte[] result = md5.ComputeHash(fs); 6 md5.Clear(); 7 StringBuilder sb = new StringBuilder(32); 8 for (int i = 0; i < result.Length; i++) 9 { 10 sb.Append(result[i].ToString("X2")); 11 } 12 return sb.ToString(); 13 }
string GetFileSHA1( 3 SHA1 sha1 = SHA1CryptoServiceProvider(); sha1.ComputeHash(fs); sha1.Clear(); 13 }
3.文件加密数据结构优化
这么多方法,有许多方法大多数代码还都是重复的,如何让代码更精简呢?重构,提高代码的复用率,最初想的是建一个基类,其他各种具体实现都在继承它,但又觉得好麻烦,要新建好几个类,最终决定,建一个类,用最简单的重构,封装方法。
最终加密帮助类实现代码如下:
1 class ValidHelper { 3 string Getfilehash( filePath,HashAlgorithm algorithm) 4 5 FileStream fs = 6 algorithm.ComputeHash(fs); 7 algorithm.Clear(); 8 StringBuilder sb = 9 10 11 sb.Append(result[i].ToString(12 13 14 } 15 16 17 18 MD5CryptoServiceProvider md5 = 19 Getfilehash(filePath,md5); 20 21 22 23 24 SHA1 sha1 = 25 26 27 28 string GetFileSHA256(29 30 SHA256 sha256 = SHA256.Create(); 31 32 33 34 string GetFileSHA384(35 36 SHA384 sha384 = SHA384.Create(); 37 38 39 40 string GetFileSHA512(41 42 SHA512 sha512 = SHA512.Create(); 43 44 45 }
代码完成之后便是测试,在网上找一个文件校验工具(使用的软媒魔方里的校验工具),进行比对,看自己的校验工具是否与软媒魔方的校验工具的校验结果是否一致,经校验,没有错误,最初测试的小文件,后来下载了一个win10系统,使用自己的校验工具,校验是否和微软官方给出的SHA1值一致时,小工具直接卡死了,过了好长时间才出来结果,这说明这个小工具还待优化,尤其是处理大文件。
在网上查找资料,看到有这样的实现思路,将文件在内存中的位置分段,比如说分成5段,分5个线程同时开始计算,最后将5个计算值再经过处理得到整个文件的SHA1值或MD5值。然而愚钝,不知道该如何实现,望大神看到之后能给予一些指导,万分感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。