Я работаю над интеграцией платежей, и у меня есть пример кода на PHP и попытка заставить его работать в Ruby. Пока что с небольшим успехом. Может ли кто-нибудь проверить мою реализацию и исправить, если я что-то делаю неправильно? Благодарю.Как эта функция PHP должна выглядеть в Ruby? HMAC MD5
PHP код:
/*
* HMAC HASH creation
* RFC 2104
*
http://www.ietf.org/rfc/rfc2104.txt
*
* @param string $key Secret key for encryption
* @param string $data String to encode
*/
function hmac($key, $data) {
$b = 64; // byte length for md5
if (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;
return md5($k_opad . pack("H*", md5($k_ipad . $data)));
}
И мой код Ruby:
#Calculate HMAC MD5 PayU hash for order.
def hmac_calculation(key, data)
b = 64
if key.length > b
key = Digest::MD5.hexdigest(key)
key = key.pack("H*")
end
key = key.ljust(b, 0x00.chr)
ipad = ''.ljust(b, 0x36.chr)
opad = ''.ljust(b, 0x5c.chr)
k_ipad = key^ipad
k_opad = key^opad
return Digest::MD5.hexdigest(k_opad + Digest::MD5.hexdigest(k_ipad + data).pack('H*'))
end
- ОБНОВЛЕНО -
Исходная строка:
7P0499016123456192013-07-08 10 : 50: 367sku000226Loremipsumdolorsitamet4112011102103HUF158 CCVISAMC41010
Секретный ключ!?
| n4A8 ~ 3T8^3 [8% I 8 @ Q
Ожидаемый результат:
5142968ed89754e8d3a9b9a2469d21f2
Я также получил этот сайт как контрольная точка, однако приведенный выше пример не соответствует этому. http://hash.online-convert.com/md5-generator
Что вы получаете от простой трассировки печати, где она отличается от реализации PHP? – gernberg
Что случилось, что не происходит так, как вы ожидаете? Можете ли вы представить пример ввода и ожидаемого вывода из кода PHP? – jrochkind
Я обновил его. – szabcsee