package main import "encoding/base64" import "crypto/rand" import "golang.org/x/crypto/bcrypt" // Generate a cryptographically secure set of random bytes.. func GenerateSafeString(length int) (string, error) { rb := make([]byte,length) _, err := rand.Read(rb) if err != nil { return "", err } return base64.URLEncoding.EncodeToString(rb), nil } func BcryptGeneratePassword(password string) (hashed_password string, salt string, err error) { salt, err = GenerateSafeString(saltLength) if err != nil { return "", "", err } password = password + salt hashed_password, err = BcryptGeneratePasswordNoSalt(password) if err != nil { return "", "", err } return hashed_password, salt, nil } func BcryptGeneratePasswordNoSalt(password string) (hash string, err error) { hashed_password, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return "", err } return string(hashed_password), nil }