对于支付提供商,我需要使用HMAC-SHA256计算基于散列的消息验证代码.这给我带来了很多麻烦.
支付提供商提供两个以伪代码正确计算的认证代码的示例.所有键均为十六进制.
key = 57617b5d2349434b34734345635073433835777e2d244c31715535255a366773755a4d70532a5879793238235f707c4f7865753f3f446e633a21575643303f66
message = "amount=100¤cy=EUR"
MAC = HMAC-SHA256( hexDecode(key), message )
result = b436e3e86cb3800b3864aeecc8d06c126f005e7645803461717a8e4b2de3a905
Run Code Online (Sandbox Code Playgroud)
message = "amount=100¤cy=EUR"
Ki = 61574d6b157f757d02457573556645750e0341481b127a07476303136c005145436c7b46651c6e4f4f040e1569464a794e534309097258550c17616075060950
Ko = 0b3d27017f151f17682f1f193f0c2f1f64692b227178106d2d096979066a3b2f2906112c0f760425256e647f032c2013243929636318323f667d0b0a1f6c633a
MAC = SHA256( hexDecode(Ko) + SHA256( hexDecode(Ki) + message ) )
result = b436e3e86cb3800b3864aeecc8d06c126f005e7645803461717a8e4b2de3a905
Run Code Online (Sandbox Code Playgroud)
在做了一些研究之后,我尝试编写代码来做这件事,但我不断得出不同的结果.
private static void Main(string[] args)
{
var key = "57617b5d2349434b34734345635073433835777e2d244c31715535255a366773755a4d70532a5879793238235f707c4f7865753f3f446e633a21575643303f66";
var ki = "61574d6b157f757d02457573556645750e0341481b127a07476303136c005145436c7b46651c6e4f4f040e1569464a794e534309097258550c17616075060950";
var ko = "0b3d27017f151f17682f1f193f0c2f1f64692b227178106d2d096979066a3b2f2906112c0f760425256e647f032c2013243929636318323f667d0b0a1f6c633a";
var mm = "amount=100¤cy=EUR";
var result1 = CalcHMACSHA256Hash(HexDecode(key), mm);
var result2 = CalcSha256Hash(string.Format("{0}{1}", HexDecode(ko), CalcSha256Hash(HexDecode(ki) + mm)));
Console.WriteLine("Expected: b436e3e86cb3800b3864aeecc8d06c126f005e7645803461717a8e4b2de3a905"); …Run Code Online (Sandbox Code Playgroud) 我正在使用此页面为某些文本生成一些测试HMAC-SHA256哈希值:
https://www.liavaag.org/English/SHA-Generator/HMAC/
但是,当我尝试在我的.Net Core项目中使用此MSDN指南中的方法时,我得不到相同的结果.有人可以向我解释如何获得与我在C#代码中从以前的网页获得的结果相同的结果吗?
这是我的代码:
// My own GetHash method usage:
var hashed = PasswordHelper.GetHash("Test", Encoding.UTF8.GetBytes("123"));
public static string GetHash(string password, byte[] salt)
{
// derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: password,
salt: salt,
prf: KeyDerivationPrf.HMACSHA256,
iterationCount: 10000,
numBytesRequested: 256 / 8));
return hashed;
}
Run Code Online (Sandbox Code Playgroud) 请帮助我不知道我的代码有什么问题。不需要签名的端点工作正常,所以我想是我如何获取签名的问题。我收到此错误:
data: { code: -2014, msg: 'API-key format invalid.' } } }
Run Code Online (Sandbox Code Playgroud)
API 文档:https : //github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md
SIGNED 端点需要在查询字符串或请求正文中发送附加参数签名。端点使用 HMAC SHA256 签名。HMAC SHA256 签名是加密的 HMAC SHA256 操作。使用您的 secretKey 作为密钥,使用 totalParams 作为 HMAC 操作的值。签名不区分大小写。totalParams 定义为与请求正文连接的查询字符串。
我的代码:
const axios = require('axios');
const crypto = require('crypto');
const qs = require('qs');
const binanceConfig = {
API_KEY: 'XXXXXXX',
API_SECRET: 'XXXXXX',
HOST_URL: 'https://api.binance.com',
};
const buildSign = (data, config) => {
return crypto.createHmac('sha256', config.API_SECRET).update(data).digest('hex');
};
const privateRequest = async (data, endPoint, type) => {
const dataQueryString …Run Code Online (Sandbox Code Playgroud) c# ×2
.net-core ×1
api ×1
asp.net-core ×1
cryptography ×1
hash ×1
hmac ×1
javascript ×1
node.js ×1
security ×1