package main import ( "crypto/rand" "crypto/sha1" "encoding/base64" "encoding/hex" "fmt" "io" ) func newUUID() string { var b [16]byte if _, err := io.ReadFull(rand.Reader, b[:]); err != nil { panic(err) } b[6] = (b[6] & 0x0f) | 0x40 // version 4 b[8] = (b[8] & 0x3f) | 0x80 // variant RFC 4122 return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:16]) } func hashSHA1(s string) string { h := sha1.Sum([]byte(s)) return hex.EncodeToString(h[:]) } func encodeB64(s string) string { return base64.StdEncoding.EncodeToString([]byte(s)) } func decodeB64(s string) string { b, err := base64.StdEncoding.DecodeString(s) if err != nil { return "[decode error]" } return string(b) }