Функция Ruby toLengthValue конвертировать в PHP - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть функция ruby, которую нужно преобразовать в PHP.

def to_length_value(*chunks)
   value = ''
   chunks.each do |chunk|

   chunk_size = 4.times.map do |index|
     (chunk.bytesize >> (8 * index)) & 0xFF
   end
     value << chunk_size.pack('C*')      
     value << chunk
    end

  value
end

Это то, что я придумал в PHP.

 function toLengthValue($chunks){
    $value = '';
    foreach ($chunks as $chunk) {
        $chunksize = array();

        for ($i=0; $i < 4; $i++) { 
            $chunksize[] = (strlen($chunk) >> (8 * $i)) & 0xFF;
        }

    $value.= pack('C*',$chunksize);
    $value.= $chunk;

 }

Когда я запускаю одинаковые массивы, я получаю немного разные результаты. Я использовал кодирование 64 по результатам, чтобы убедиться, что они совпадают, и проблема в том, что они не совпадают.

   AUdvb2dsZQFtZXJjaGFudDoxMjM0NTY3ODkwMTIzNDU2Nzg5MAFFQ3YxAXsiZW5jcnlwdGVkTWVzc2FnZSI6IlJybGlNTUFwTzBNZ2hIZmpmVmJKRHozam1kd1FZbHV1OHlqTFBxbnNSVVozNnMyOGNlYitLeEVkRklheEMyWS9kNmhVbTdrVU9weUxiQ01sajBJWlhVUDdXbUd4SFcrb1FyOEJEaUhtd2xSem92TzNXQ3lCOTFrY2kwZHoxN2s1cUthVC82UGYzRk11KzBJaGlHZCtRdEQ2ZCtpZnY2YnZ5NmlBMHJ3cEdNSGhlQy9nS3FaRjR4Q1lXSmp3N1R3YTcyeEVianA5cWxPMG1zQThqeXNqdUIrTjJpbmpzTDQzSS9sQjU5MkkvVjlWWkp2STVTN1REWmk4WFFiMWtOS05taEgxWERFc2VUM01iMTgweHRKeEN4dVZPcGs5eUg3TnlSV2hhM0hWNlRncitHcVNTazVqQ3paeVkvUHh4d1RqblJ2UlBtY3JkN1BUTit3MWs0TTRUZG5peVN0bWRrOHlVZHhnZCt1dE5CM1h3aDRKOGNhRnREVlpkUllnb0R4NVMvM3pKNnhRY2txUXpWRDBmUnV5a1Z0TWpZKytFTWJOZk5kR0tWMHU4bUFFQlZYSmFQVnN4SVNDZ0JKVHZwTnpsbGozRE12TkVFL1pjNXArN2l6TWg4bXorK2c1YWI1bXJ3L1hnLy9kWW0vbmRLRzZWOVdYcW9zVGc0SWRoc1dBTGdDTHlZVlp3eGpzakYza3VhMFhaMkl5ZW1zdkdVMEt0Wkw5VXk0XHUwMDNkIiwiZXBoZW1lcmFsUHVibGljS2V5IjoiQkNWUEtpbFZnTi9NZzdjZzRua0xabnZNWjBFSU9OSCtDbmxxNnlraFdrL2xxK2ZISGdIK2xPb3kwTVh2STdaZkRMNkFlc1NPOCttcUxsNE13d0hEZDZvXHUwMDNkIiwidGFnIjoiUC9tK3dGb1E3eVFIZXB3aEdkR3ZwMDhUU1BQdU8xYTVTeUY5QzVRS0llNFx1MDAzZCJ9

VS

 BgAAAEdvb2dsZR0AAABtZXJjaGFudDoxMjM0NTY3ODkwMTIzNDU2Nzg5MAQAAABFQ3Yx8wIAAHsiZW5jcnlwdGVkTWVzc2FnZSI6IlJybGlNTUFwTzBNZ2hIZmpmVmJKRHozam1kd1FZbHV1OHlqTFBxbnNSVVozNnMyOGNlYitLeEVkRklheEMyWS9kNmhVbTdrVU9weUxiQ01sajBJWlhVUDdXbUd4SFcrb1FyOEJEaUhtd2xSem92TzNXQ3lCOTFrY2kwZHoxN2s1cUthVC82UGYzRk11KzBJaGlHZCtRdEQ2ZCtpZnY2YnZ5NmlBMHJ3cEdNSGhlQy9nS3FaRjR4Q1lXSmp3N1R3YTcyeEVianA5cWxPMG1zQThqeXNqdUIrTjJpbmpzTDQzSS9sQjU5MkkvVjlWWkp2STVTN1REWmk4WFFiMWtOS05taEgxWERFc2VUM01iMTgweHRKeEN4dVZPcGs5eUg3TnlSV2hhM0hWNlRncitHcVNTazVqQ3paeVkvUHh4d1RqblJ2UlBtY3JkN1BUTit3MWs0TTRUZG5peVN0bWRrOHlVZHhnZCt1dE5CM1h3aDRKOGNhRnREVlpkUllnb0R4NVMvM3pKNnhRY2txUXpWRDBmUnV5a1Z0TWpZKytFTWJOZk5kR0tWMHU4bUFFQlZYSmFQVnN4SVNDZ0JKVHZwTnpsbGozRE12TkVFL1pjNXArN2l6TWg4bXorK2c1YWI1bXJ3L1hnLy9kWW0vbmRLRzZWOVdYcW9zVGc0SWRoc1dBTGdDTHlZVlp3eGpzakYza3VhMFhaMkl5ZW1zdkdVMEt0Wkw5VXk0XHUwMDNkIiwiZXBoZW1lcmFsUHVibGljS2V5IjoiQkNWUEtpbFZnTi9NZzdjZzRua0xabnZNWjBFSU9OSCtDbmxxNnlraFdrL2xxK2ZISGdIK2xPb3kwTVh2STdaZkRMNkFlc1NPOCttcUxsNE13d0hEZDZvXHUwMDNkIiwidGFnIjoiUC9tK3dGb1E3eVFIZXB3aEdkR3ZwMDhUU1BQdU8xYTVTeUY5QzVRS0llNFx1MDAzZCJ9

Ruby Input:

signed_bytes = to_length_value(
    'Google',
    recipient_id,
    protocol_version,
    signed_message
  )

Php Input:

     $signed_bytes = $this->toLengthValue(array('Google', 'merchant:12345678901234567890', 'ECv1', '{"encryptedMessage":"ilnxpVEEaaZ2GFSc7cQDNxSMkjF5nWFcT6w3HSdpX+5mXn/uv6naeTjSoGfy1gi6JdpToKuc0hhkqpetNVDj6dPH8u01K685xEL0AVjuSR84WnRfxnWjDNlYRuGS0N5iPY6G/981ucbgwBNcAjqemTdc6xv6/lQwZq36V7FWt4IAchg55JJt2mnFMSDkkMTz5bWfJtgmwg55b0KXfuTA3ADLxeFlOLuT3DICFzo45jyCK1RSltiCHhD+Lm65wESCHCgS9W50yh2a/J1lTCUP7Xy/aaurVtNUrB+H/SlY16Szk455h27d2Zi6JKzxnL/rQ+5ME1TWpp0n66RQ70y1roC5myNy6ILmEoyIdAU6FahuGX4MQFkmO4G4GOL5lMEj63hF1U2N/iFm03Urx2dSWkCsiVM\\u003d","ephemeralPublicKey":"BEENTno093zpl+QST4mXKVqrOVHsqweffqILO+HAob2JyF8YNtjBWXoKunSF0rkGY3spzp/BsNHKJ3Req+DfOwM\\u003d","tag":"eZJ0p0DUu9TGM3bOx8VBCcgt9sJ9tgLRnLjgPyd4aKs\\u003d"}'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...