2022-09-07 23:34:37 +08:00
|
|
|
package utils
|
|
|
|
|
|
|
|
import (
|
2024-01-03 00:55:41 +08:00
|
|
|
"crypto/hmac"
|
|
|
|
"crypto/sha512"
|
|
|
|
"encoding/base64"
|
2022-09-07 23:34:37 +08:00
|
|
|
"math/rand"
|
|
|
|
)
|
|
|
|
|
|
|
|
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
|
|
|
|
|
|
|
func RandomString(n int) string {
|
|
|
|
s := make([]rune, n)
|
|
|
|
for i := range s {
|
|
|
|
s[i] = letters[rand.Intn(len(letters))]
|
|
|
|
}
|
|
|
|
|
|
|
|
return string(s)
|
|
|
|
}
|
2024-01-03 00:55:41 +08:00
|
|
|
|
|
|
|
func SignString(s string, key []byte) string {
|
|
|
|
mac := hmac.New(sha512.New, key)
|
|
|
|
mac.Write([]byte(s))
|
|
|
|
|
|
|
|
return base64.StdEncoding.EncodeToString(mac.Sum(nil))
|
|
|
|
}
|
|
|
|
|
|
|
|
func SignAndCompare(s string, exp string, key []byte) bool {
|
|
|
|
mac := hmac.New(sha512.New, key)
|
|
|
|
mac.Write([]byte(s))
|
|
|
|
|
|
|
|
decoded, err := base64.StdEncoding.DecodeString(exp)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return hmac.Equal(mac.Sum(nil), decoded)
|
|
|
|
}
|