token.go 952 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package security
  2. import (
  3. "crypto/rand"
  4. "crypto/sha256"
  5. "encoding/base64"
  6. "encoding/hex"
  7. )
  8. func GenerateToken(byteLength int) (string, error) {
  9. raw := make([]byte, byteLength)
  10. if _, err := rand.Read(raw); err != nil {
  11. return "", err
  12. }
  13. return base64.RawURLEncoding.EncodeToString(raw), nil
  14. }
  15. func GenerateNumericCode(length int) (string, error) {
  16. if length <= 0 {
  17. length = 6
  18. }
  19. const digits = "0123456789"
  20. raw := make([]byte, length)
  21. if _, err := rand.Read(raw); err != nil {
  22. return "", err
  23. }
  24. code := make([]byte, length)
  25. for i := range raw {
  26. code[i] = digits[int(raw[i])%len(digits)]
  27. }
  28. return string(code), nil
  29. }
  30. func HashText(value string) string {
  31. sum := sha256.Sum256([]byte(value))
  32. return hex.EncodeToString(sum[:])
  33. }
  34. func GeneratePublicID(prefix string) (string, error) {
  35. raw := make([]byte, 8)
  36. if _, err := rand.Read(raw); err != nil {
  37. return "", err
  38. }
  39. return prefix + "_" + hex.EncodeToString(raw), nil
  40. }