bcrypt介紹
bcrypt是單向Hash加密演算法,不可反向破解生成明文,
bcrypt是一種加鹽的加密方法,MD5加密時候,同一個密碼經過hash的時候生成的是同一個hash值,在大資料的情況下,有些經過md5加密的方法將會被破解,
使用bcrypt進行加密,同一個密碼每次生成的hash值都是不相同的,每次加密的時候首先會生成一個亂數就是鹽,之后將這個亂數與密碼進行hash,
package main
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
// 加密密碼
func HashAndSalt(pwdStr string) (err error, pwdHash string) {
pwd := []byte(pwdStr)
hash, err := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost)
if err != nil {
return
}
pwdHash = string(hash)
return
}
// 驗證密碼
func ComparePasswords(hashedPwd string, plainPwd string) bool {
byteHash := []byte(hashedPwd)
bytePwd := []byte(plainPwd)
err := bcrypt.CompareHashAndPassword(byteHash, bytePwd)
if err != nil {
return false
}
return true
}
func main() {
passwordOK := "admin"
passwordERR := "adminxx"
hashStr, err := HashAndSalt(passwordOK)
if err != nil {
fmt.Println(err)
}
fmt.Println(hashStr)
// 正確密碼驗證
check = ComparePasswords(hashStr, passwordOK)
if !check {
fmt.Println("pw wrong")
} else {
fmt.Println("pw ok")
}
// 錯誤密碼驗證
check := ComparePasswords(hashStr, passwordERR )
if !check {
fmt.Println("pw wrong")
} else {
fmt.Println("pw ok")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/226923.html
標籤:區塊鏈
下一篇:區塊鏈通識——資料層
