大佬教程收集整理的这篇文章主要介绍了如何在PHP中复制此C#散列? (toByteArray(),ComputeHash()),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// C# Code I am trying to Replicate in php var apiTokenId = 1887; var apiToken = "E1024763-1234-5678-91E0-T32E4E7EB316"; // Used to authenticate our request by the API (which is in C#) var StringToSign = String.Empty; StringToSign += "POST"+"UserAgent"+"http://api.com/post"; // Here is the issue,How can I do the following 3 lines in php? // No "secret key" provided?.. How do I do this in php? var hmacsha1 = new HMACSHA1(new Guid(apiToken).toByteArray()); // Make a byte array with ASCII encoding. byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(StringToSign); // Finally,'computeHash' of the above (what does this do exactly?!) var calculatedSignature = Convert.ToBase64String(hmacsha1.ComputeHash(byteArray));
我已经尝试了许多使用pack()
和我在网上发现的其他功能的变体,但没有任何东西可以比较,我不知道我是否做得对.
任何C#开发人员都可以运行上面的代码并发布生成的值,以便我可以使用它来检查/测试吗?
我已经尝试检查MSDN以查看这些方法的作用,但是卡住了(并且不确定它是否正确,因为我没有什么比较它).
php伪代码
// Set vars $apiToken = 'E1024763-1234-5678-91E0-T32E4E7EB316'; $apiTokenId = '1887'; $StringToSign = "POST"."UserAgent"."http://api.com/post"; // HowTo: Build a `byteArray` of our apiToken? (i think) // C#: var hmacsha1 = new HMACSHA1(new Guid(apiToken).toByteArray()); // HowTo: Convert our $StringToSign to a ASCII encoded `byteArray`? // C#: byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(StringToSign); // HowTo: Generate a base64 String of our (`hmacsha1`.ComputeHash(byteArray)) // C#: var calculatedSignature = Convert.ToBase64String(hmacsha1.ComputeHash(byteArray));
这听起来非常简单直接,但我不确定这些C#方法中有哪些方法可以做到.
这些C#方法做什么/返回什么?
> ComputeHash(byteArray) – 计算什么?..返回什么?
> System.Text.Encoding.ASCII.GetBytes(StringToSign); – 这又回来了什么?
>新的HMACSHA1(新Guid(apiToken).toByteArray());没有密钥?,使用的密钥是什么?
任何资源或帮助将非常感激.
我在SO上尝试了other答案的变体,但没有快乐.
我可以在网上某处运行3行代码(比如JSFiddle,但对于C#?)@R_221_9447@看到每行的输出?
更新 – 赏金添加
仍然遇到问题,我已经设法在Visual studio中测试C#代码,但是在获取php中生成的相同哈希时遇到了麻烦.
我想要…
..上面的C#代码(具体来说,创建SHA1哈希的3行)要转换成php(查看我上面发布的伪代码).我应该能够使用php匹配C#哈希.
如果您有任何其他问题,请询问.
以下代码应该有效:
$apiTokenId = 1887; $apiToken = "E1024763-1234-5678-91E0-FF2E4E7EB316"; $StringToSign = ''; $hexStr = str_replace('-','',$apiToken); $c = explode('-',chunk_split($hexStr,2,'-')); $hexArr = array($c[3],$c[2],$c[1],$c[0],$c[5],$c[4],$c[7],$c[6],$c[8],$c[9],$c[10],$c[11],$c[12],$c[13],$c[14],$c[15]); $keyStr = ''; for ($i = 0; $i < 16; ++$i) { $num = hexdec($hexArr[$i]); $keyStr .= chr($num); } $StringToSign .= "POST" . "UserAgent" . "http://api.com/post"; $hmacsha1 = base64_encode(hash_hmac('sha1',$StringToSign,$keyStr,truE));
我已根据您上面提供的C#代码测试了此代码,输出结果相同.但是,原始代码中指定的GUID无效,因此我不得不稍微更改它.
以上是大佬教程为你收集整理的如何在PHP中复制此C#散列? (toByteArray(),ComputeHash())全部内容,希望文章能够帮你解决如何在PHP中复制此C#散列? (toByteArray(),ComputeHash())所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。