安装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)
}
|