切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
C# 基础
Mybatis
ADO.NET
ASP.NET
Python 基础
Linq
Web Forms
.NET
Spring
SpringBoot
SpringCloud
.NET Core 中间件
Maven
.NET 类库
ASP.NET MVC
EF
NHibernate
WebApi
Java
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
服务端
C# 文件指纹简单实现示例
[TOC] ## 1. 文件指纹 文件指纹通常是一个哈希值,每个文件都可以计算出唯一的哈希值,如果文件内容发生了变化,哈希值也会随着变化,因此判断一个文件内容是否发生了变化,只要对比前后的文件指纹即可。 **文件备份场景:**系统中对文件内容进行了更改,需要同步更新备份的文件,通过判断文件指纹确定备份文件是否需要更新 > Tips:视频文件比较大,如果对整个视频文件进行哈希,速度会比较慢,可以采用截取某个时段的图像信息,对这个图像信息进行哈希,当然截取音频哈希也可以 ## 2. 代码示例 下面的代码分别使用了 SHA256 和 MD5 对文件进行哈希计算,获取到哈希值后转成对应的字符串,SHA256 方法将得到一个长度为64的全小写字符串,MD5 方法将得到一个长度为32的全小写字符串 **实现:** ```csharp using System; using System.IO; using System.Security.Cryptography; namespace Study2 { public static class FileMark { static string[] fileArray = { @"C:\Users\Administrator\Desktop\Graph.png" , @"C:\Users\Administrator\Desktop\古风美.jpg", @"C:\Users\Administrator\Desktop\test.txt" }; /// <summary> /// 使用SHA256创建 /// </summary> /// <param name="index"></param> /// <returns></returns> public static string CreateMarkSHA256(int index) { string hashStr = ""; SHA256 sha = SHA256.Create(); string filePath = fileArray[index]; using (FileStream fs = File.OpenRead(filePath)) { byte[] bt = sha.ComputeHash(fs); hashStr = BitConverter.ToString(bt).Replace("-", "").ToLower(); } return hashStr; } /// <summary> /// 使用MD5创建 /// </summary> /// <param name="index"></param> /// <returns></returns> public static string CreateMarkMD5(int index) { string hashStr = ""; MD5 md = MD5.Create(); string filePath = fileArray[index]; using (FileStream fs = File.OpenRead(filePath)) { byte[] bt = md.ComputeHash(fs); hashStr = BitConverter.ToString(bt).Replace("-", "").ToLower(); } return hashStr; } } } ``` **调用:** ```csharp using System; namespace Study2 { class Program { static string[] remove = new string[] { }; static void Main(string[] args) { string hash = FileMark.CreateMarkSHA256(0); Console.WriteLine(hash); Console.WriteLine(hash.Length); string hash1 = FileMark.CreateMarkSHA256(1); Console.WriteLine(hash1); Console.WriteLine(hash1.Length); string hash2 = FileMark.CreateMarkSHA256(2); Console.WriteLine(hash2); Console.WriteLine(hash2.Length); Console.WriteLine("------------------------------------------------"); string hashd5 = FileMark.CreateMarkMD5(0); Console.WriteLine(hashd5); Console.WriteLine(hashd5.Length); string hashd51 = FileMark.CreateMarkMD5(1); Console.WriteLine(hashd51); Console.WriteLine(hashd51.Length); string hashd52 = FileMark.CreateMarkMD5(2); Console.WriteLine(hashd52); Console.WriteLine(hashd52.Length); Console.ReadKey(); } } } ``` **调用结果:** ``` bash 0d50e977f5bef4f88ab3657f5476e7405dee1d0ebd214cfa1bc39c95b4f7d2fb 64 c5dbe4081d5a5ea9e07ca53bd5400c457f966098fa20ef3d37361abfa8a1bbb2 64 6f7f673ed969cd7279d546b8cc3182d1e50d469324c05f8ec353e57adc6e8555 64 ------------------------------------------------ 50bc995e2a07c28a7ee75c7e32f77359 32 ba3cb15a1bc8fcff19bcbe57e5215090 32 60d756ff266ccf6a29ca122c390eeec7 32 ```
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号