1. 哈希算法

1.1.1. 使用场景

  • 对用户输入的密码进行加密
  • 用户登录时对用户的密码进行比对

1.1.2. 例子

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "golang.org/x/crypto/bcrypt"
  6. )
  7. func main() {
  8. userPassword := "123456"
  9. passwordbyte, err := GeneratePassword(userPassword)
  10. if err != nil {
  11. fmt.Println("加密出错了")
  12. }
  13. fmt.Println(passwordbyte)
  14. // passwordstring := string(passwordbyte)
  15. // fmt.Println(passwordstring)
  16. //模拟这个字符串是从数据库读取出来的 值是12345678
  17. mysql_password := "$2a$10$I8WaWXgiBw8j/IBejb3t/.s5NoOYLvoQzL6mIM2g3TEu4z0HenzqK"
  18. isOk, _ := ValidatePassword(userPassword, mysql_password)
  19. if !isOk {
  20. fmt.Println("密码错误")
  21. return
  22. }
  23. fmt.Println(isOk)
  24. }
  25. //GeneratePassword 给密码就行加密操作
  26. func GeneratePassword(userPassword string) ([]byte, error) {
  27. return bcrypt.GenerateFromPassword([]byte(userPassword), bcrypt.DefaultCost)
  28. }
  29. //ValidatePassword 密码比对
  30. func ValidatePassword(userPassword string, hashed string) (isOK bool, err error) {
  31. if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
  32. return false, errors.New("密码比对错误!")
  33. }
  34. return true, nil
  35. }

注意

golang.org/x/crypto/bcrypt这个包下载有些难度,需要的小伙伴可以自行百度

官网地址:http://golang.org/x/crypto/bcrypt