加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

文件校验工具的开发及问题

发布时间:2020-12-16 01:14:29 所属栏目:百科 来源:网络整理
导读:文件校验工具的开发及问题 1.加密算法的熟悉 ???? 现在文件校验使用较多的是校验文件的MD5值和SHA1值,有些使用的还有CRC32,前些天微软发布了VisualStudio正式版,win10镜像,微软官方给出的校验方式都是校验文件的SHA1值 ? ? ? ?C#进行MD5加密与SHA加密的

文件校验工具的开发及问题

1.加密算法的熟悉

????现在文件校验使用较多的是校验文件的MD5值和SHA1值,有些使用的还有CRC32,前些天微软发布了VisualStudio正式版,win10镜像,微软官方给出的校验方式都是校验文件的SHA1值

? ? ? ?C#进行MD5加密与SHA加密的实现总结在这里

?

2.文件的加密计算

知道了如何进行普通字符串的加密还不够,我们要校验的文件的MD5值或SHA1值,接下来熟悉如何获取文件的MD5值和SHA1值

?

  • 获取文件的MD5值

    

 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         }

?

?

?

  • 获取文件的SHA1值

?

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     }

?

4.完成后测试与分析

代码完成之后便是测试,在网上找一个文件校验工具(使用的软媒魔方里的校验工具),进行比对,看自己的校验工具是否与软媒魔方的校验工具的校验结果是否一致,经校验,没有错误,最初测试的小文件,后来下载了一个win10系统,使用自己的校验工具,校验是否和微软官方给出的SHA1值一致时,小工具直接卡死了,过了好长时间才出来结果,这说明这个小工具还待优化,尤其是处理大文件。

在网上查找资料,看到有这样的实现思路,将文件在内存中的位置分段,比如说分成5段,分5个线程同时开始计算,最后将5个计算值再经过处理得到整个文件的SHA1值或MD5值。然而愚钝,不知道该如何实现,望大神看到之后能给予一些指导,万分感谢。

?

文件校验工具下载

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读