如何将CryptoJS计算SHA512哈希的JavaScript代码转换为VB.NET
Bittrex v3 接口Content哈希计算问题解答
现有代码的核心错误
你目前的VB.NET实现用错了哈希算法:
- 原JS逻辑里计算
contentHash用的是无密钥的普通SHA512算法 - 你误用了
HMACSHA512(带密钥的哈希认证算法),二者计算结果完全不一致,会直接导致鉴权失败。
注意HMACSHA512是后续计算请求签名Signature头用的,和Content-SHA512头的计算是两个独立步骤,不要混淆。
空字符串哈希的原因
对空字符串计算SHA512是Bittrex v3鉴权规则的强制要求:
- 所有API请求,无论使用什么HTTP方法,都必须携带
Content-SHA512请求头 - 调用GET、DELETE这类不需要提交请求体的只读接口时,请求体本身就是空字符串,因此直接对空字符串计算哈希即可,不存在requestBody赋值遗漏的问题
- 只有调用POST、PUT等需要提交参数的接口时,
requestBody才是你序列化后的JSON请求参数内容
修正后的contentHash计算代码
' 计算空请求体的Content哈希,有请求体时把空字符串替换为JSON序列化后的请求内容即可 Dim requestContent As String = "" Using sha512 As SHA512 = SHA512.Create() Dim hashResult As Byte() = sha512.ComputeHash(System.Text.Encoding.UTF8.GetBytes(requestContent)) ' 你原有ExchangesClass.getString方法转十六进制小写的逻辑完全正确,可以直接复用 Dim contentHash As String = ExchangesClass.getString(hashResult) End Using
内容的提问来源于stack exchange,提问作者user4951
相关产品推荐
相关产品推荐

