跳过正文
  1. 文章/
  2. GoLang/
  3. 常用包/
  4. 标准包/

13、crypto

·840 字·2 分钟· loading · loading · ·
GoLang 常用包 标准包
GradyYoung
作者
GradyYoung
标准包 - 点击查看当前系列文章
§ 13、crypto 「 当前文章 」

crypto库是Go生态中密码学功能的核心,它为Go开发者提供了一套全面、安全、保持现代化、提供安全默认值且易于使用的密码学工具,使得在Go应用程序中实现各种密码学功能需求时变得简单而可靠。

Go的密码学功能(即我们统一称的crypto库)分为两个主要部分:标准库的crypto相关包和扩展库golang.org/x/crypto。这种分离设计有其特定的目的和优势:

  • Go标准库的crypto相关包,包含了最基础、最稳定和使用最广泛的密码学算法。这些算法实现经过Go团队的严格审查,保证了长期稳定性和向后兼容性。同时,这些包是随Go安装包分发的,使用时再无需引入额外的依赖。
  • golang.org/x/crypto则号称是Go标准库crypto相关包的补充库,虽然它同样由Go团队维护,但由于不是标准库,它可以包含更多实验性或较新的密码学算法及实现,并可以更快速的迭代和更新。这样它也可以成为Go标准库中一些crypto相关包的“孵化器”,就像当年golang.org/x/net/context提升为标准库context一样。

哈希函数
#

md5
#

  • 功能:实现MD5哈希算法
  • 用途:生成数据的128位哈希值
package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
)

func main() {
	sum := md5.Sum([]byte("HelloWorld"))
	str := hex.EncodeToString(sum[:])
	fmt.Println(str)
}
  • 使用建议:不推荐用于安全相关用途,因为MD5已被证明不够安全。

sha1
#

  • 功能:实现SHA-1哈希算法
  • 用途:生成数据的160位哈希值
package main

import (
	"crypto/sha1"
	"encoding/hex"
	"fmt"
)

func main() {
	sum := sha1.Sum([]byte("HelloWorld"))
	str := hex.EncodeToString(sum[:])
	fmt.Println(str)
}
  • 使用建议:不推荐用于安全相关用途,因为SHA-1已被证明存在碰撞风险。

sha256
#

  • 功能:实现SHA-256哈希算法
  • 用途:生成数据的256位哈希值
package main

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
)

func main() {
	sum := sha256.Sum256([]byte("HelloWorld"))
	str := hex.EncodeToString(sum[:])
	fmt.Println(str)
}
  • 使用建议:推荐使用,安全性高。

sha512
#

  • 功能:实现SHA-512哈希算法
  • 用途:生成数据的512位哈希值
package main

import (
	"crypto/sha512"
	"encoding/hex"
	"fmt"
)

func main() {
	sum := sha512.Sum512([]byte("HelloWorld"))
	str := hex.EncodeToString(sum[:])
	fmt.Println(str)
}
  • 使用建议:推荐使用,安全性很高。

加密和解密
#

密码加密
#

用于密码存储和校验。

package utils

import (
	"golang.org/x/crypto/bcrypt"
)

// HashPassword 对密码进行哈希加密
func HashPassword(password string) (string, error) {
	fromPassword, err := bcrypt.GenerateFromPassword([]byte(password), 14)
	return string(fromPassword), err
}

// CheckPasswordHash 验证密码
func CheckPasswordHash(hash, password string) bool {
	err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
	return err == nil
}
标准包 - 点击查看当前系列文章
§ 13、crypto 「 当前文章 」