Golang实现Md5校验

embedded/2024/10/22 10:44:45/

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

1、本地文件

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

package mainimport ("crypto/md5""encoding/hex""fmt""io""net/http""os"
)func main() {Md5ByLocalFile()
}func Md5ByLocalFile() {// // 指定文件路径filePath := "d:/code/000fa28f-c114-49fe-9699-8c7f8b2eb222.png"// filePath := "https://minio.dev.inrobot.cloud/map/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 mainimport ("crypto/md5""encoding/hex""fmt""io""net/http""os"
)func main() {Md5ByRemoteFile()
}func Md5ByRemoteFile() {// 指定文件的URLurl := "https://minio.dev.inrobot.cloud/map/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值是否相同,判断文件是不是同一个文件,有没有被损坏或篡改。


http://www.ppmy.cn/embedded/87431.html

相关文章

grep: /etc/mysql/my.cnf: 没有那个文件或目录

当你收到 "grep: /etc/mysql/my.cnf: 没有那个文件或目录" 的错误信息时,这意味着你的系统上可能没有默认的 MySQL/MariaDB 配置文件 /etc/mysql/my.cnf。MariaDB 和 MySQL 可能会使用不同的配置文件路径。下面是一些步骤来帮助你找到正确的配置文件&…

学习ruixingkafei过程

一、抓包 手机安装证书,开启VPN抓包,电脑上打开花瓶,在同一个局域网内抓包,这些老一套没什么可说的。 看看我们的抓包结果是不是很美丽,请求内容加密,返回内容也加密,猜测加密方式aes&#xff0…

Linux 中断的 CPU 亲和性

文章目录 1. 前言2. 背景3. 什么是中断的 CPU 亲和性3. IRQ 中断 默认的 CPU 亲和性4. 硬件架构 CPU 固有 IRQ 中断亲和性5. 中断芯片 各中断 CPU 亲和性 初始化5.1 GIC v2 芯片的 SPI 中断 CPU 亲和性 初始化5.1.1 软件层次: 中断 CPU 亲和性 初始化5.1.2 中断芯片层次: GIC v…

scrapy出现OSError: could not get source code错误解决

出现问题如下: Traceback (most recent call last):File "C:\Users\admin\Desktop\crawler_scrapy_us\venv\lib\site-packages\scrapy\utils\defer.py", line 73, in mustbe_deferredresult f(*args, **kw)File "C:\Users\admin\Desktop\crawler_sc…

架构师的36项修炼 学习笔记

架构师的36项修炼 学习笔记 分布式缓存 缓存特点 1.技术简单 2.性能提升明显 3.应用场景多 缓存数据存储 hash表 缓存的关键指标 命中率 缓存失效方式 超时失效 LLT 实时清除 代理缓存 反向代理缓存 多层反向代理缓存 内容分发网络CDN 通读缓存 包括代理缓存…

昇思25天学习打卡营第1天|快速入门实操教程

昇思25天学习打卡营第1天|快速入门实操教程 目录 昇思25天学习打卡营第1天|快速入门实操教程 一、MindSpore内容简介 主要特点: MindSpore的组成部分: 二、入门实操步骤 1. 安装必要的依赖包 2. 下载并处理数据集 3. 构建网络模型 4. 训练模型…

PyTorch和TensorFlow概念及对比

PyTorch和TensorFlow是两个流行的深度学习框架,用于构建和训练机器学习和深度学习模型。它们各自有一些独特的特点和优点: 一 、PyTorch 动态计算图: PyTorch使用动态计算图(Dynamic Computation Graph),…

Aider + Llama 3.1:无需编码开发全栈APP

Llama 3.1在代码生成方面的卓越表现 在代码生成领域,Llama 3.1的表现尤为出色,几乎成为了开源模型中的佼佼者。它不仅在代码自动化和生成方面表现突出,还可以作为AI编程助手,帮助调试代码和开发完整的应用程序。在多个基准测试中…