У меня есть функция 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"}'));