欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Golang实现Md5校验

Golang实现Md5校验

2024/10/24 20:22:46 来源:https://blog.csdn.net/suwei825/article/details/140690318  浏览:    关键词:Golang实现Md5校验

      最近项目中有个需求,就是地图文件下发后,接收方需要文件的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值是否相同,判断文件是不是同一个文件,有没有被损坏或篡改。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com