package install import "encoding/base64" import "crypto/rand" import "golang.org/x/crypto/bcrypt" const saltLength int = 32 // 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.StdEncoding.EncodeToString(rb), nil } // Generate a bcrypt hash // Note: The salt is in the hash, therefore the salt value is blank func BcryptGeneratePassword(password string) (hash string, salt string, err error) { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return "", "", err } return string(hashedPassword), salt, nil }