1

私は支払いの統合に取り組んでおり、PHP のサンプル コードを入手し、Ruby で動作させようとしています。これまでのところ、ほとんど成功していません。誰かが私の実装をチェックして、何か間違っているかどうかを修正できますか? ありがとう。

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:367sku000226Loremipsumdolorsitamet4112011102103HUF158CCVISAMC41010

秘密鍵:

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

期待される結果:

5142968ed89754e8d3a9b9a2469d21f2

このサイトも参照点として入手しましたが、上記の例は一致しません。 http://hash.online-convert.com/md5-generator

4

2 に答える 2

0

結局、これをもう一度試してみましたが、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
于 2016-07-12T11:11:34.183 に答える