package security import ( "crypto/rand" "crypto/sha256" "encoding/base64" "encoding/hex" ) func GenerateToken(byteLength int) (string, error) { raw := make([]byte, byteLength) if _, err := rand.Read(raw); err != nil { return "", err } return base64.RawURLEncoding.EncodeToString(raw), nil } func GenerateNumericCode(length int) (string, error) { if length <= 0 { length = 6 } const digits = "0123456789" raw := make([]byte, length) if _, err := rand.Read(raw); err != nil { return "", err } code := make([]byte, length) for i := range raw { code[i] = digits[int(raw[i])%len(digits)] } return string(code), nil } func HashText(value string) string { sum := sha256.Sum256([]byte(value)) return hex.EncodeToString(sum[:]) } func GeneratePublicID(prefix string) (string, error) { raw := make([]byte, 8) if _, err := rand.Read(raw); err != nil { return "", err } return prefix + "_" + hex.EncodeToString(raw), nil }