password_hash.go 796 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package utils
  2. import (
  3. "crypto/rand"
  4. "encoding/base64"
  5. mt "math/rand"
  6. "golang.org/x/crypto/bcrypt"
  7. )
  8. func PasswordHash(password string) (string, error) {
  9. bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
  10. return string(bytes), err
  11. }
  12. func PasswordVerify(password, hash string) bool {
  13. err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
  14. return err == nil
  15. }
  16. // $sha-256$salt-key$hash-abcd
  17. // $sha-512$salt-key$hash-abcd
  18. const (
  19. saltSize = 16
  20. delmiter = "$"
  21. )
  22. func RandSecret(min int, max int) (string, error) {
  23. rb := make([]byte, randInt(min, max))
  24. _, err := rand.Read(rb)
  25. if err != nil {
  26. return "", err
  27. }
  28. return base64.URLEncoding.EncodeToString(rb), nil
  29. }
  30. func randInt(min int, max int) int {
  31. return min + mt.Intn(max-min)
  32. }