Go语言中使用crypto/sha256包可生成SHA-256哈希值,适用于数据完整性校验等场景;1.导入crypto/sha256包;2.通过sha256.New()和Write方法或简化的Sum256函数对字符串计算哈希;3.处理大文件时可结合io.Copy分块读取以避免内存溢出。

在Go语言中,使用 crypto/sha256 包可以轻松生成 SHA-256 哈希值。SHA-256 是一种广泛使用的加密哈希函数,能将任意长度的数据转换为 32 字节(256 位)的唯一摘要,常用于数据完整性校验、密码存储等场景。
导入 crypto/sha256 包
要使用 SHA-256 功能,需导入标准库中的 crypto/sha256:
import "crypto/sha256"对字符串生成 SHA-256 哈希
以下是一个对字符串生成 SHA-256 哈希的完整示例:
package mainimport (
"crypto/sha256"
"fmt"
"strings"
)
func main() {
data := "Hello, Golang!"
// 创建一个新的 sha256 hash 对象
hash := sha256.New()
// 向 hash 写入数据(需要字节切片)
hash.Write([]byte(data))
// 计算并获取哈希结果
result := hash.Sum(nil)
// 将结果格式化为十六进制字符串
fmt.Printf("SHA-256: %x\n", result)
}
输出结果为:
立即学习“go语言免费学习笔记(深入)”;
SHA-256: 1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f53简化写法:使用 Sum256 函数
如果只是对一段数据一次性计算哈希,可以直接使用 sha256.Sum256() 函数,更简洁:
package mainimport (
"crypto/sha256"
"fmt"
)
func main() {
data := "Hello, Golang!"
hash := sha256.Sum256([]byte(data))
fmt.Printf("SHA-256: %x\n", hash)
}
该方法返回的是一个 [32]byte 数组,%x 格式符会自动将其转为小写十六进制字符串。
处理文件或大块数据
对于大文件,应分块读取并逐步写入 hash 对象,避免内存溢出:
package mainimport (
"crypto/sha256"
"fmt"
"io"
"os"
)
func getFileHash(filename string) (string, error) {
file, err := os.Open(filename)
if err != nil {
return "", err
}
defer file.Close()
hash := sha256.New()
_, err = io.Copy(hash, file)
if err != nil {
return "", err
}
return fmt.Sprintf("%x", hash.Sum(nil)), nil
}
利用 io.Copy 可以高效地将文件内容复制到 hash 中,同时完成哈希计算。
基本上就这些。Golang 的 crypto/sha256 接口设计简洁,适合各种哈希需求,无论是字符串、用户输入还是文件内容,都能快速实现安全的 SHA-256 摘要生成。










