.加密算法的熟悉
目前校验文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段时间微软发布了VisualStudio正式版,win镜像,微软官方给出的校验方式都是校验文件的SHA值。
C#进行MD加密与SHA加密的实现总结在这里
.文件的加密计算
知道了如何进行普通字符串的加密还不够,我们要校验的文件的MD值或SHA值,接下来熟悉如何获取文件的MD值和SHA值
获取文件的MD值
public static string GetFileMD(string filePath) { MDCryptoServiceProvider md = new MDCryptoServiceProvider(); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] result = md.ComputeHash(fs); md.Clear(); StringBuilder sb = new StringBuilder(); for (int i = ; i < result.Length; i++) { sb.Append(result[i].ToString("X")); } return sb.ToString(); }
获取文件的SHA值
public static string GetFileSHA(string filePath) { SHA sha = new SHACryptoServiceProvider(); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] result = sha.ComputeHash(fs); sha.Clear(); StringBuilder sb = new StringBuilder(); for (int i = ; i < result.Length; i++) { sb.Append(result[i].ToString("X")); } return sb.ToString(); }
public static class ValidHelper { public static string GetFileHash(string filePath, HashAlgorithm algorithm) { FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] result = algorithm.ComputeHash(fs); algorithm.Clear(); StringBuilder sb = new StringBuilder(); for (int i = ; i < result.Length; i++) { sb.Append(result[i].ToString("X")); } return sb.ToString(); } public static string GetFileMD(string filePath) { MDCryptoServiceProvider md = new MDCryptoServiceProvider(); return GetFileHash(filePath, md); } public static string GetFileSHA(string filePath) { SHA sha = new SHACryptoServiceProvider(); return GetFileHash(filePath, sha); } public static string GetFileSHA(string filePath) { SHA sha = SHA.Create(); return GetFileHash(filePath, sha); } public static string GetFileSHA(string filePath) { SHA sha = SHA.Create(); return GetFileHash(filePath, sha); } public static string GetFileSHA(string filePath) { SHA sha = SHA.Create(); return GetFileHash(filePath, sha); } }
.完成后测试与分析
代码完成之后便是测试,在网上找一个文件校验工具(使用的软媒魔方里的校验工具),进行比对,看自己的校验工具是否与软媒魔方的校验工具的校验结果是否一致,经校验,没有错误,最初测试的小文件,后来下载了一个win系统,使用自己的校验工具,校验是否和微软官方给出的SHA值一致时,小工具直接卡死了,过了好长时间才出来结果,这说明这个小工具还待优化,尤其是处理大文件。
在网上查找资料,看到有这样的实现思路,将文件在内存中的位置分段,比如说分成段,分个线程同时开始计算,最后将个计算值再经过处理得到整个文件的SHA值或MD值。然而愚钝,不知道该如何实现,望大神看到之后能给予一些指导,万分感谢。
以上介绍就是本文的全部内容,希望大家喜欢。
本文向大家介绍IOS 开发之触摸事件详细介绍,包括了IOS 开发之触摸事件详细介绍的使用技巧和注意事项,需要的朋友参考一下 IOS 触摸事件 iOS中的事件可以分为3大类型: 触摸事件 加速计事件 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。 UIApplication、UIViewContro
本文向大家介绍IOS 身份证校验详细介绍及示例代码,包括了IOS 身份证校验详细介绍及示例代码的使用技巧和注意事项,需要的朋友参考一下 IOS 身份证校验 身份证基础知识: 身份证是国民的身份编号,编号是有一定规律的,这里介绍身份证验证规则比较详细。项目中经常会需要对身份证进行校验,我们先了解一些基本知识,然后分析代码 居民身份证号码,根据〖中华人民共和国国家标准 GB 11643-1999〗中有
本文向大家介绍Android NDK开发详细介绍,包括了Android NDK开发详细介绍的使用技巧和注意事项,需要的朋友参考一下 Android之NDK开发 一、NDK产生的背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能
本文向大家介绍java并发之ArrayBlockingQueue详细介绍,包括了java并发之ArrayBlockingQueue详细介绍的使用技巧和注意事项,需要的朋友参考一下 java并发之ArrayBlockingQueue详细介绍 ArrayBlockingQueue是常用的线程集合,在线程池中也常常被当做任务队列来使用。使用频率特别高。他是维护的是一个循环队列(基于数组实现),循环结构
本文向大家介绍C++中头文件和源文件详细介绍,包括了C++中头文件和源文件详细介绍的使用技巧和注意事项,需要的朋友参考一下 C++中的头文件和源文件详解 一、C++编译模式 通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。 C+ +语言支持“分别编译”(
本文向大家介绍详细介绍SpringCloud之Ribbon,包括了详细介绍SpringCloud之Ribbon的使用技巧和注意事项,需要的朋友参考一下 一:Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Lo