哈希(crypto/bcrypt)

安装crypto/bcrypt

go get -u golang.org/x/crypto/bcrypt

由于网络环境因素,上面的命令无法正常执行,可改为以下命令:

go get -u github.com/golang/crypto

以上命令执行后,直接使用该包会编译失败,提示缺少依赖包。缺少的依赖包其实就在crypto包中,只需要更改其所在路径就能解决。

更改前:

/Users/admin/go/src/github.com/golang/crypto

更改后:

/Users/admin/go/src/golang.org/x/crypto

哈希字符串

bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)

以上代码获取字符串的哈希值。

哈希匹配

err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))

以上代码中,bcrypt.CompareHashAndPassword比较字符串和哈希值,若是不匹配,返回error。

完整源码

package main

import (
	"fmt"

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

func HashPassword(password string) (string, error) {
	bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
	return string(bytes), err
}

func CheckPasswordHash(password, hash string) bool {
	err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
	return err == nil
}

func main() {
	password := "secret"
	hash, _ := HashPassword(password)

	fmt.Println("Password:", password)
	fmt.Println("Hash:    ", hash)

	match := CheckPasswordHash(password, hash)
	fmt.Println("Match:   ", match)
}

版权声明:本文为suma110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。