· 6 years ago · Feb 17, 2019, 06:04 AM
1import (
2 "fmt"
3 "math/rand"
4 "time"
5 "crypto/hmac"
6 "crypto/sha1"
7 "github.com/axgle/mahonia"
8 "encoding/base64"
9 "net/url"
10)
11
12const (
13 signValidDuration = 3600 * 24 * 2
14 Max = 2147483647
15)
16
17var (
18 secretId = ""
19 secretKey = ""
20)
21
22func init(){
23
24}
25
26//获å–ç¾å
27func GetSignature() string{
28 var (
29 currentTimeStamp int64 //当剿—¶é—´æˆ³
30 expireTime int64 //过期时间戳
31 random int32 //éšæœº
32 strContent string //ç¾å
33 procedure string //任务æµ
34 )
35
36 currentTimeStamp = time.Now().Unix()
37 expireTime = currentTimeStamp + signValidDuration
38 rand.Seed(time.Now().UnixNano())
39 random = rand.Int31()
40 procedure = "hls" //自定义任务æµåå—
41
42 v := url.Values{}
43 v.Add("secretId",secretId)
44 v.Add("currentTimeStamp",fmt.Sprint(currentTimeStamp))
45 v.Add("expireTime",fmt.Sprint(expireTime))
46 v.Add("random",fmt.Sprint(random))
47 v.Add("procedure",procedure)
48 strContent = v.Encode()
49
50 bytesSign := hashHmacByte(strContent,secretKey)
51 enc := mahonia.NewEncoder("UTF-8")
52 byteContent := []byte(enc.ConvertString(string(strContent)))
53 length := len(bytesSign) + len(byteContent)
54 nCon := make([]byte,length)
55 copy(nCon,bytesSign)
56 copy(nCon[len(bytesSign):],byteContent)
57 encodeString := base64.StdEncoding.EncodeToString(nCon)
58 return encodeString
59}
60
61//sha1åŠ å¯†
62func hashHmacByte(signatureString,secretKey string) []byte{
63 enc := mahonia.NewEncoder("UTF-8")
64 h := hmac.New(sha1.New, []byte(enc.ConvertString(secretKey)))
65 h.Write([]byte(signatureString))
66 return h.Sum(nil)
67}