signature.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package util
  2. import (
  3. "crypto/hmac"
  4. "crypto/sha1"
  5. "encoding/base64"
  6. "net/url"
  7. "strings"
  8. )
  9. //CreateSignature creates signature for string following Aliyun rules
  10. func CreateSignature(stringToSignature, accessKeySecret string) string {
  11. // Crypto by HMAC-SHA1
  12. hmacSha1 := hmac.New(sha1.New, []byte(accessKeySecret))
  13. hmacSha1.Write([]byte(stringToSignature))
  14. sign := hmacSha1.Sum(nil)
  15. // Encode to Base64
  16. base64Sign := base64.StdEncoding.EncodeToString(sign)
  17. return base64Sign
  18. }
  19. func percentReplace(str string) string {
  20. str = strings.Replace(str, "+", "%20", -1)
  21. str = strings.Replace(str, "*", "%2A", -1)
  22. str = strings.Replace(str, "%7E", "~", -1)
  23. return str
  24. }
  25. // CreateSignatureForRequest creates signature for query string values
  26. func CreateSignatureForRequest(method string, values *url.Values, accessKeySecret string) string {
  27. canonicalizedQueryString := percentReplace(values.Encode())
  28. stringToSign := method + "&%2F&" + url.QueryEscape(canonicalizedQueryString)
  29. return CreateSignature(stringToSign, accessKeySecret)
  30. }