这个PHP函数在Ruby中应该是什么样子的?HMAC MD5
我正在进行一个支付集成,我有一个PHP示例代码,并试图用Ruby实现它。到目前为止几乎没有成功。如果我做错了什么,有人能检查我的实现并修复吗?谢谢 PHP代码:这个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)
/*
*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选项。我会尝试一下。谢谢。