12345678910111213141516171819202122232425262728293031323334353637383940 |
- package util
- import (
- "crypto/hmac"
- "crypto/sha1"
- "encoding/base64"
- "net/url"
- "strings"
- )
- //CreateSignature creates signature for string following Aliyun rules
- func CreateSignature(stringToSignature, accessKeySecret string) string {
- // Crypto by HMAC-SHA1
- hmacSha1 := hmac.New(sha1.New, []byte(accessKeySecret))
- hmacSha1.Write([]byte(stringToSignature))
- sign := hmacSha1.Sum(nil)
- // Encode to Base64
- base64Sign := base64.StdEncoding.EncodeToString(sign)
- return base64Sign
- }
- func percentReplace(str string) string {
- str = strings.Replace(str, "+", "%20", -1)
- str = strings.Replace(str, "*", "%2A", -1)
- str = strings.Replace(str, "%7E", "~", -1)
- return str
- }
- // CreateSignatureForRequest creates signature for query string values
- func CreateSignatureForRequest(method string, values *url.Values, accessKeySecret string) string {
- canonicalizedQueryString := percentReplace(values.Encode())
- stringToSign := method + "&%2F&" + url.QueryEscape(canonicalizedQueryString)
- return CreateSignature(stringToSign, accessKeySecret)
- }
|