package util
|
|
import (
|
"crypto/hmac"
|
"crypto/md5"
|
"crypto/sha256"
|
"encoding/base64"
|
"unsafe"
|
)
|
func ComputeHmacSha256Base64(message string, secret string) string {
|
key := []byte(secret)
|
h := hmac.New(sha256.New, key)
|
h.Write([]byte(message))
|
abs := h.Sum(nil)
|
|
return base64.StdEncoding.EncodeToString(abs)
|
}
|
|
func Hik_ComputeSignatureBase64(appKey string, appSecret string, httpMethod string, accept string, contentType string, date string, url string) string {
|
httpHeaders := httpMethod +"\n" + accept + "\n" + contentType + "\n"+ date +"\n"
|
customHeaders := "x-ca-key:"+ appKey +"\n"
|
msg := httpHeaders + customHeaders + url
|
return ComputeHmacSha256Base64(msg, appSecret)
|
}
|
|
type SliceMock struct {
|
addr uintptr
|
len int
|
cap int
|
}
|
|
func GetIBytes(v interface{}) []byte {
|
len := unsafe.Sizeof(v)
|
dataBytes := &SliceMock{
|
addr: uintptr(unsafe.Pointer(&v)),
|
cap: int(len),
|
len: int(len),
|
}
|
b := *(*[]byte)(unsafe.Pointer(dataBytes))
|
return b
|
}
|
|
func MD5Base64(s []byte) string {
|
sum := md5.Sum(s)
|
return base64.StdEncoding.EncodeToString(sum[:])
|
}
|