Golang实现Md5校验
创始人
2024-11-20 08:04:06
0

      最近项目中有个需求,就是地图文件下发后,接收方需要文件的md5值,和接收到的文件做比对,以免文件不完整,引起bug,于是测试了下本地文件和远程文件的md5计算。

1、本地文件

    要获取指定本地文件的MD5值,你可以使用crypto/md5包来计算文件的MD5散列值。以下是一个示例代码,演示了如何打开一个文件并计算其MD5值:  

package main  import ( 	"crypto/md5" 	"encoding/hex" 	"fmt" 	"io" 	"net/http" 	"os" )  func main() { 	Md5ByLocalFile() }  func Md5ByLocalFile() { 	// // 指定文件路径 	filePath := "d:/code/000fa28f-c114-49fe-9699-8c7f8b2eb222.png" 	// filePath := "/zb_users/upload/2024/csdn/000fa28f-c114-49fe-9699-8c7f8b2eb222.png" 	// 打开文件 	file, err := os.Open(filePath) 	if err != nil { 		fmt.Println("Failed to open file:", err) 		return 	} 	defer file.Close()  	// 创建一个md5哈希对象 	hasher := md5.New()  	// 将文件内容读入哈希对象 	if _, err := io.Copy(hasher, file); err != nil { 		fmt.Println("Failed to read file:", err) 		return 	}  	// 计算并获取哈希值 	hashBytes := hasher.Sum(nil)  	// 将哈希值转换为十六进制字符串 	hashString := hex.EncodeToString(hashBytes)  	// 输出MD5哈希值 	fmt.Println("MD5 hash of the file:", hashString) } 

输出结果如下:

PS D:\gostudy2022\TimeScheduler\md5> go run .\main.go LocalFile MD5 hash of the file: b4735b024f3552b1277671303149719b

2、远程文件

    远程文件其实就是网络中可访问的资源文件,要获取指定网络地址的文件的MD5值,你需要先下载文件的内容到内存或磁盘上,然后再计算其MD5值。这里我展示一个示例,该示例使用net/http包来下载文件,并使用crypto/md5包来计算MD5值。以下是完整的示例代码:

package main  import ( 	"crypto/md5" 	"encoding/hex" 	"fmt" 	"io" 	"net/http" 	"os" )  func main() { 	Md5ByRemoteFile() }  func Md5ByRemoteFile() { 	// 指定文件的URL 	url := "/zb_users/upload/2024/csdn/000fa28f-c114-49fe-9699-8c7f8b2eb222.png"  	// 发起HTTP GET请求 	resp, err := http.Get(url) 	if err != nil { 		fmt.Println("Failed to fetch file:", err) 		return 	} 	defer resp.Body.Close()  	// 检查响应状态码 	if resp.StatusCode != http.StatusOK { 		fmt.Printf("Failed to fetch file: HTTP status code %d\n", resp.StatusCode) 		return 	}  	// 创建一个md5哈希对象 	hasher := md5.New()  	// 将文件内容读入哈希对象 	if _, err := io.Copy(hasher, resp.Body); err != nil { 		fmt.Println("Failed to read file:", err) 		return 	}  	// 计算并获取哈希值 	hashBytes := hasher.Sum(nil)  	// 将哈希值转换为十六进制字符串 	hashString := hex.EncodeToString(hashBytes)  	// 输出MD5哈希值 	fmt.Println("MD5 hash of the file:", hashString) } 

这里远程文件和上例的文件相同,输出结果如下:

PS D:\gostudy2022\TimeScheduler\md5> go run .\main.go RemoteFile MD5 hash of the file: b4735b024f3552b1277671303149719b

可以看到,本地文件和远程文件的md5值是相同的,从而在项目中,我们可以根据md5值是否相同,判断文件是不是同一个文件,有没有被损坏或篡改。

相关内容

热门资讯

科技新动态!开心跑得快有辅助工... 科技新动态!开心跑得快有辅助工具吗(透明挂)外挂透明挂辅助神器(2021已更新)(哔哩哔哩)1)开心...
4分钟实锤!吉祥麻将,微扑克切... 4分钟实锤!吉祥麻将,微扑克切实是真的有挂,介绍教程(有挂揭秘);一、吉祥麻将AI软件牌型概率发牌机...
实测发现!鄂州晃晃外 挂(透视... 实测发现!鄂州晃晃外 挂(透视)透视辅助工具(2021已更新)(哔哩哔哩)1、鄂州晃晃外 挂系统规律...
三分钟了解!好彩麻将怎样才可以... 三分钟了解!好彩麻将怎样才可以拿好牌(透视辅助)外挂透明挂辅助机制(2020已更新)(哔哩哔哩)1、...
九分钟辅助!斗棋辅助器在哪,w... 九分钟辅助!斗棋辅助器在哪,wepoker本来真的是有挂,教你攻略(有挂教程)1、下载好斗棋辅助器在...
记者揭秘!!广东雀神麻雀辅助器... 记者揭秘!!广东雀神麻雀辅助器在哪里下载(透视)透视辅助app(2020已更新)(哔哩哔哩)1、很好...
终于清楚!皮皮跑胡子输赢规律(... 终于清楚!皮皮跑胡子输赢规律(辅助挂)外挂透明挂辅助机制(2026已更新)(哔哩哔哩)1)皮皮跑胡子...
二分钟科普!花城牌舍系统规律,... 二分钟科普!花城牌舍系统规律,aAPOKER竟然存在有挂,揭秘教程(有挂插件)进入游戏-大厅左侧-新...
一分钟教你!心悦手机麻将辅牌器... 一分钟教你!心悦手机麻将辅牌器(透视辅助)外挂透视辅助挂(2024已更新)(哔哩哔哩)1、每一步都需...
科技新动态!四方河南麻将赢牌技... 科技新动态!四方河南麻将赢牌技巧(透视)外挂透明挂辅助神器(2026已更新)(哔哩哔哩)1、每一步都...