mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-18 00:16:37 +08:00
85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
package common
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha1"
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
func Sha256Raw(data string) []byte {
|
|
h := sha256.New()
|
|
h.Write([]byte(data))
|
|
return h.Sum(nil)
|
|
}
|
|
|
|
func Sha1Raw(data []byte) []byte {
|
|
h := sha1.New()
|
|
h.Write([]byte(data))
|
|
return h.Sum(nil)
|
|
}
|
|
|
|
func Sha1(data string) string {
|
|
return hex.EncodeToString(Sha1Raw([]byte(data)))
|
|
}
|
|
|
|
func HmacSha256Raw(message, key []byte) []byte {
|
|
h := hmac.New(sha256.New, key)
|
|
h.Write(message)
|
|
return h.Sum(nil)
|
|
}
|
|
|
|
func HmacSha256(message, key string) string {
|
|
return hex.EncodeToString(HmacSha256Raw([]byte(message), []byte(key)))
|
|
}
|
|
|
|
func RandomBytes(length int) []byte {
|
|
rand.Seed(time.Now().UnixNano())
|
|
b := make([]byte, length)
|
|
if _, err := rand.Read(b); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return b
|
|
}
|
|
|
|
func RandomString(length int) string {
|
|
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
result := make([]byte, length)
|
|
randomBytes := RandomBytes(length)
|
|
for i := 0; i < length; i++ {
|
|
result[i] = chars[randomBytes[i]%byte(len(chars))]
|
|
}
|
|
|
|
return string(result)
|
|
}
|
|
|
|
func RandomHex(length int) string {
|
|
const chars = "abcdef0123456789"
|
|
result := make([]byte, length)
|
|
randomBytes := RandomBytes(length)
|
|
for i := 0; i < length; i++ {
|
|
result[i] = chars[randomBytes[i]%byte(len(chars))]
|
|
}
|
|
|
|
return string(result)
|
|
}
|
|
|
|
func RandomNumber(length int) string {
|
|
const chars = "0123456789"
|
|
result := make([]byte, length)
|
|
randomBytes := RandomBytes(length)
|
|
for i := 0; i < length; i++ {
|
|
result[i] = chars[randomBytes[i]%byte(len(chars))]
|
|
}
|
|
|
|
return string(result)
|
|
}
|
|
|
|
func RandomUUID() string {
|
|
all := RandomHex(32)
|
|
return all[:8] + "-" + all[8:12] + "-" + all[12:16] + "-" + all[16:20] + "-" + all[20:]
|
|
}
|