кодирование/декодирование sha512 и base64
Требуется реализовать то же самое, но на языке golang:
Node js:
var key = Buffer(secret, "base64");
var message = path + nonce;
var hmac = crypto.createHmac("sha512", key);
var signature = hmac.update(message).digest("base64");
Python:
key = base64.b64decode(secret)
message = str.encode(path + str(nonce), "utf-8")
hmac = hmac.new(key, message, sha512)
signature = base64.b64encode(hmac.digest()).decode()
Что делаю я:
0)в req я передаю строку нужного вида (то есть req это message, A.apiSecret это secret)
1)раскодировать ApiSecret с помощью base64
2)получаю hex шифуя req ключем из пункта 1)
3)кодирую hex в base64
То есть в итоге должен получиться код base64, построенный из
Вот мой код функции, но она кажется дает неверный ответ.
func (A *Crex24Api) signData(req string) string {
fmt.Println(req)
// decoded apiSecret with base64
encoding := base64.StdEncoding
data := []byte(A.apiSecret)
decoded := make([]byte, encoding.DecodedLen(len(data)))
n, err := encoding.Decode(decoded, data)
if err != nil {
log.Fatal(err)
}
decoded = decoded[:n]
fmt.Println("decoded: ", string(decoded))
// encod sgn with sha512
mac := hmac.New(sha512.New, decoded)
mac.Write([]byte(req))
sum := mac.Sum(nil)
hex := hex.EncodeToString(sum)
fmt.Println("hex: ", hex)
// encode hex with base64
encoded := make([]byte, encoding.EncodedLen(len(hex)))
base64.StdEncoding.Encode(encoded, []byte(hex))
sgn := string(encoded)
fmt.Println("sgn: ", sgn)
A.signature = sgn
return sgn
}