是否有最好的(见下文)方法在C#中附加两个字节数组?
假装我完全控制,我可以使第一个字节数组足够大,以便在结尾保存第二个字节数组并使用Array.CopyTo函数.或者我可以遍历各个字节并进行分配.
还有更好的方法吗?我无法想象做一些事情,比如将字节数组转换为字符串并加入它们并将它们转换回来将比上述任何一种方法都要好.
在最好/更好(按顺序)方面:
一个限制是我必须在.NET 2.0框架中工作.
推荐的两个选择是MemoryStream和BlockCopy.我已经对10,000次循环进行了3次简单的速度测试,得到了以下结果:
List <byte> AddRange的结果超过1000万个循环:List <byte>时间:16694
测试显示,一般情况下,除非你正在做很多字节副本[ 我是 ],查看字节副本是不值得关注的[例如1000万次运行产生的差异多达1.1秒].
我从一个woocommerce网站收到webhooks到nodejs/express应用程序.我试图验证webhook的签名以证明真实性,但我计算的哈希永远不会对应于woocommerce在钩子的签名头中报告的签名.
这是我用来验证真实性的代码:
function verifySignature(signature, payload, key){
var computedSignature = crypto.createHmac("sha256", key).update(payload).digest('base64');
debug('computed signature: %s', computedSignature);
return computedSignature === signature;
}
Run Code Online (Sandbox Code Playgroud)
使用以下参数调用此函数:
var signature = req.headers['x-wc-webhook-signature'];
verifySignature(signature, JSON.stringify(req.body), config.wooCommence.accounts.api[config.env].webhookSecret)
Run Code Online (Sandbox Code Playgroud)
webhook的签名标题将签名报告为BewIV/zZMbmuJkHaUwaQxjX8yR6jRktPZQN9j2+67Oo=.然而,上述操作的结果是S34YqftH1R8F4uH4Ya2BSM1rn0H9NiqEA2Nr7W1CWZs=
我已经在webhook上手动配置了秘密,正如您在上面的代码中所看到的,这个相同的秘密也在快速应用程序中进行了硬编码.因此,要么我正在使用错误的有效负载来计算签名,要么还有其他可疑的东西阻止我验证这些签名.
非常感谢帮助我解决这个问题的任何指示.
我尝试连接到Binance ApiUsing C#And RestSharplib。根据文件,我应该尝试这样的事情:
查询字符串:符号=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
HMAC SHA256 签名:
[linux]$ echo -n "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559" | openssl dgst -sha256 -hmac "NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j" (stdin)= c8db56825ae71d6d71206000000000000000000000000000001c8db56825ae71d6d7920621bc8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c88c88c8888888
(HMAC SHA256) [linux]$ curl -H "X-MBX-APIKEY: vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A" -X POST https://api.binance.com/api.binance.order/api/quantity=YC&T&TyC&T=C&T&Q =0.1&recvWindow=5000×tamp=1499827319559&signature=c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71
我尝试了很多方法和很多堆栈问题,但我找到了其他语言而不是 c# 的解决方案。这是我所做的基于:这个和这个
public string GetAccountInfo()
{
long timeStamp = GetTimestamp();
var request = new RestRequest("api/v3/account");
request.AddHeader("X-MBX-APIKEY", ApiKey);
request.AddParameter("timestamp", timeStamp, ParameterType.QueryString);
request.AddParameter("recvWindow", RecvWindow, ParameterType.QueryString);
request.AddParameter("signature", GetSignature(request.Parameters), ParameterType.QueryString);
return Client.Get(request).Content;
}
private long GetTimestamp()
{
return new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
}
private string …Run Code Online (Sandbox Code Playgroud)