Go语言中通过crypto包实现数据哈希与校验,示例展示SHA256字符串哈希生成、文件MD5校验值计算及通用hash.Hash接口复用方法,推荐使用SHA256等安全算法。

在Go语言中,生成数据的散列值(哈希值)和校验值是常见的需求,常用于数据完整性验证、文件指纹识别等场景。Go标准库 crypto 提供了多种哈希算法支持,如 MD5、SHA1、SHA256、SHA512 等。下面通过示例展示如何使用这些算法生成散列值并进行校验。
SHA256 是目前广泛使用的安全哈希算法之一。以下代码演示如何为字符串生成 SHA256 哈希:
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := "hello world"
hash := sha256.Sum256([]byte(data))
hashString := fmt.Sprintf("%x", hash)
fmt.Println("SHA256:", hashString)
}
输出结果为一个64位小写十六进制字符串,表示该字符串的唯一摘要。
对于大文件,通常需要逐块读取以避免内存溢出。以下是计算文件 MD5 值的示例:
立即学习“go语言免费学习笔记(深入)”;
package main
import (
"crypto/md5"
"fmt"
"io"
"os"
)
func getFileMD5(filename string) (string, error) {
file, err := os.Open(filename)
if err != nil {
return "", err
}
defer file.Close()
hash := md5.New()
if _, err := io.Copy(hash, file); err != nil {
return "", err
}
return fmt.Sprintf("%x", hash.Sum(nil)), nil
}
func main() {
md5sum, err := getFileMD5("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("MD5:", md5sum)
}
这段代码打开指定文件,使用 io.Copy 将内容写入 MD5 哈希器,最终输出十六进制格式的校验值。
Go 的 hash.Hash 接口允许你编写通用的哈希处理逻辑。你可以轻松切换不同算法:
package main
import (
"crypto/sha1"
"fmt"
"hash"
)
func computeHash(h hash.Hash, data []byte) string {
h.Write(data)
return fmt.Sprintf("%x", h.Sum(nil))
}
func main() {
data := []byte("test data")
sha1Hash := computeHash(sha1.New(), data)
fmt.Println("SHA1:", sha1Hash)
sha256Hash := computeHash(sha256.New(), data)
fmt.Println("SHA256:", sha256Hash)
}
通过传入不同的哈希实例(如 sha1.New() 或 sha256.New()),可以复用 computeHash 函数。
基本上就这些。Go 的哈希库设计简洁,结合标准 I/O 操作即可高效完成常见任务。注意:MD5 和 SHA1 已不推荐用于安全敏感场景,建议优先使用 SHA256 或更高强度算法。
以上就是Golanghash生成散列与校验值示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号