Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个PHP函数在Ruby中应该是什么样子的?HMAC MD5_Php_Ruby_Hmac_Payu - Fatal编程技术网

这个PHP函数在Ruby中应该是什么样子的?HMAC MD5

这个PHP函数在Ruby中应该是什么样子的?HMAC MD5,php,ruby,hmac,payu,Php,Ruby,Hmac,Payu,我正在进行一个支付集成,我有一个PHP示例代码,并试图用Ruby实现它。到目前为止几乎没有成功。如果我做错了什么,有人能检查我的实现并修复吗?谢谢 PHP代码: /* *HMAC哈希创建 *RFC2104 * http://www.ietf.org/rfc/rfc2104.txt * *@param string$key用于加密的密钥 *@param string$要编码的数据字符串 */ 函数hmac($key$data){ $b=64;//md5的字节长度 如果(strlen($key)

我正在进行一个支付集成,我有一个PHP示例代码,并试图用Ruby实现它。到目前为止几乎没有成功。如果我做错了什么,有人能检查我的实现并修复吗?谢谢

PHP代码:

/*
*HMAC哈希创建
*RFC2104
* 
http://www.ietf.org/rfc/rfc2104.txt
* 
*@param string$key用于加密的密钥
*@param string$要编码的数据字符串
*/
函数hmac($key$data){
$b=64;//md5的字节长度
如果(strlen($key)>$b){
$key=pack(“H*”,md5($key));
}
$key=str_pad($key$b,chr(0x00));
$ipad=str_pad(“”,$b,chr(0x36));
$opad=str_pad(“”,$b,chr(0x5c));
$k_ipad=$key^$ipad;
$k_opad=$key^$opad;
返回md5($k_opad.pack(“H*”),md5($k_ipad.$data));
}
还有我的Ruby代码:

#计算订单的HMAC MD5 PayU哈希。
def hmac_计算(键、数据)
b=64
如果key.length>b
key=Digest::MD5.hexdigest(key)
key=key.pack(“H*”)
终止
key=key.ljust(b,0x00.chr)
ipad=''.ljust(b,0x36.chr)
opad=''.ljust(b,0x5c.chr)
k_ipad=按键^ipad
k_opad=键^opad
return Digest::MD5.hexdigest(k_opad+Digest::MD5.hexdigest(k_ipad+data).pack('H*'))
终止
--更新--

源字符串:

7P0499016123456192013-07-08 10:50:367SKU000226LOREMIPSUMDOLORISTAMET412011102103HUF158CCVISAMC41010

密钥:

|n4A8~!3T8^3[8%I?8@Q

预期结果:

5142968ed89754e8d3a9b9a2469d21f2

我也得到了这个网站作为参考点,但上面的例子不匹配。

没有理由编写自己的HMAC实现,也有很多很多理由不这样做。只需使用由提供的安全且经过良好测试的实现:


这就是您所需要的一切。

没有理由编写自己的HMAC实现,也有很多很多理由不这样做。只需使用以下提供的安全且经过良好测试的实现:


这就是你真正需要的。

毕竟我又试了一次,似乎PayU最初的要求是错误的。根本没有解决方案符合他们的预期结果

    require 'openssl'

    key = '|n4A8~!3T8^3[8%I?8@Q'

    string = '7P0499016123456192013-07-08 10:50:367sku000226Loremipsumdolorsitamet4112011102103HUF158CCVISAMC41010'

    digest = OpenSSL::Digest.new('md5')

    hmac = OpenSSL::HMAC.hexdigest(digest, key, string)

    puts hmac # Result = 7e84e5a7ceff25a8400ecf9608aed731

毕竟我又试了一次,似乎PayU最初的要求是错误的。根本没有解决方案符合他们的预期结果

    require 'openssl'

    key = '|n4A8~!3T8^3[8%I?8@Q'

    string = '7P0499016123456192013-07-08 10:50:367sku000226Loremipsumdolorsitamet4112011102103HUF158CCVISAMC41010'

    digest = OpenSSL::Digest.new('md5')

    hmac = OpenSSL::HMAC.hexdigest(digest, key, string)

    puts hmac # Result = 7e84e5a7ceff25a8400ecf9608aed731

你从一个简单的打印跟踪中得到了什么,它与PHP实现有什么不同?哪里出了问题,什么事情没有按你期望的方式发生?你能提供一个PHP代码的示例输入和预期输出吗?一个MD5散列(比如你链接到的站点生成的散列)与HMAC MD5散列不同,您不应该期望它们给出相同的结果。那么在站点上如何处理:用于HMAC变体的共享密钥?您从一个简单的打印跟踪中得到了什么,它与PHP实现有什么不同?哪里出了问题,发生了什么事情?您能提供一个inpu示例吗PHP代码的t和预期输出?一个MD5散列(如链接到的站点生成的散列)与HMAC MD5散列不同,你不应该期望它们给出相同的结果。那么在网站上如何:用于HMAC变体的共享密钥?不重新发明轮子就是钥匙,很好。我一直在尝试各种摘要和HMAC选项。我会尝试一下。谢谢。不重新发明轮子就是钥匙,很好。I'v我一直在尝试各种摘要和HMAC选项。我会尝试一下。谢谢。