Проверка подписи при byte array

kimisa

Новичок
Я получаю пост запрос и мне нужно его проверить с помощью открытого ключа. Запрос состоит из 2 полей - строка с данными (xml) и сама подпись. Проблема состоит в том, что при создании подписи эту xml строку вначале превращают в массив байт. Для проверки подписи я нашла только одну функцию - openssl_verify. Но там на вход идет строка, а не массив байт. Как мне проверить подпись?
 

kimisa

Новичок
PHP:
$string = unpack('C*', $string);
  return openssl_verify($string, $signature, $pubkey);
В итоге получаю
openssl_verify() expects parameter 1 to be string, array given
 

kimisa

Новичок
Ну да, так не ругается, т.к. строка. Но проверку не проходит.
 

AnrDaemon

Продвинутый новичок
Код полностью… Что вы там чудите - непонятно.
Как саму строку получаете? И почему C, когда есть a.
 

kimisa

Новичок
PHP:
$signFromPost = base64_decode(rawurldecode($params['SIGNATURE']));
$xml = base64_decode(rawurldecode($params['XML']));
openssl_verify($xml, $signFromPost, $pubkey);
Ключ получен верно, т.к. уже использовался до этого
 

AnrDaemon

Продвинутый новичок
Вам не кажется, что у вас многовато decode?
Тестовый набор давайте.
 

kimisa

Новичок
Так если всё закодировано.
PHP:
Array
(
    [XML] => PFBheW1lbnQgUGF5bWVudElkPSIyMSIgVXNlcklkPSIxNDExMjU5NjQzODEiIEFtb3VudD0iOS4wMDAwIiBUb3RhbEFtb3VudD0iOS4wMDAwIiBDb21taXNzaW9uQW1vdW50PSIwLjAwMDAiIENyZWF0ZURhdGU9IjIwMTYtMDgtMzFUMTA6MDE6MjcuNTA3IiBVcGRhdGVEYXRlPSIyMDE2LTA4LTMxVDEwOjAxOjI3LjUwNyIgUGF5bWVudFN0YXRlSWQ9IkNyZWF0ZWQiIExhc3RGb3JtSWQ9IiRGaW5hbCI+DQogIDxNYXN0ZXJGaWVsZD45ODc4NzY1NjcxPC9NYXN0ZXJGaWVsZD4NCiAgPFByb3ZpZGVyIFByb3ZpZGVySWQ9InRlMTEiIEN1cnJlbmN5SWQ9IjY0MyI+DQogICAgPFRpdGxlPtCi0LXRgdGC0L7QstGL0Lkg0L/RgNC+0LLQsNC50LTQtdGAINCy0YvQv9C70LDRgtGLPC9UaXRsZT4NCiAgICA8VXJsIC8+DQogICAgPE1pbkFtb3VudD4zLjAwMDA8L01pbkFtb3VudD4NCiAgICA8TWF4QW1vdW50PjE1MDAwLjAwMDA8L01heEFtb3VudD4NCiAgICA8SXNTYWZlPmZhbHNlPC9Jc1NhZmU+DQogICAgPExvZ29Vcmw+Ly93d3cud2FsbGV0b25lLmNvbS9sb2dvL3Byb3ZpZGVyL3cxLnBuZz93PTEyMCZhbXA7aD04MDwvTG9nb1VybD4NCiAgICA8Q29tbWlzc2lvbj4NCiAgICAgIDxDb21taXNzaW9uUmF0ZT4wPC9Db21taXNzaW9uUmF0ZT4NCiAgICAgIDxDb3N0QW1vdW50PjA8L0Nvc3RBbW91bnQ+DQogICAgICA8TWluQ29tbWlzc2lvbkFtb3VudD4wPC9NaW5Db21taXNzaW9uQW1vdW50Pg0KICAgICAgPEJvbnVzUmF0ZT4wPC9Cb251c1JhdGU+DQogICAgPC9Db21taXNzaW9uPg0KICA8L1Byb3ZpZGVyPg0KICA8UGFyYW1zPg0KICAgIDxQYXJhbSBGaWVsZElkPSJwaG9uZSIgRmllbGRUaXRsZT0i0JzQvtCx0LjQu9GM0L3Ri9C5INGC0LXQu9C10YTQvtC9IiBWYWx1ZT0iOTg3ODc2NTY3MSIgRGlzcGxheVZhbHVlPSI5ODc4NzY1NjcxIiAvPg0KICAgIDxQYXJhbSBGaWVsZElkPSJuYW1lIiBGaWVsZFRpdGxlPSLQndC+0LLQvtC1INC/0L7Qu9C1IiBWYWx1ZT0iYm5ubiIgRGlzcGxheVZhbHVlPSJibm5uIiAvPg0KICAgIDxQYXJhbSBGaWVsZElkPSJBbW91bnQiIEZpZWxkVGl0bGU9ItCh0YPQvNC80LAg0Log0LfQsNGH0LjRgdC70LXQvdC40Y4iIFZhbHVlPSI5LjAwIiBEaXNwbGF5VmFsdWU9IjkuMDAgUlVCIiAvPg0KICA8L1BhcmFtcz4NCjwvUGF5bWVudD4=
    [SIGNATURE] => l9T/r+v++LLiuJ2Y8T0LvnZephyE3OUYCGNizkNoA8mWrnhzckvcpg2Qu170yeBikKSzNOjHEZkBKd1edbNWfhoGJH+0OWs6xOtk2dk741m4w7FWsWnMYl9HG8zcnkHNyyDAttxnL6VP4DKhW1li6DOu9JlCHxZy4wdBEwXCJ5JL+lIVHyUpqimacB9v1B6jj61Nf5mRX03tZU3fefnH4N8FcALQTS3gZutIeVpBSNWU+ADJ5kzJJ+k2Rw3k0D0Efc/peMkH55jGnvPXm+b+2aKnU0oi/qyZbKiYC2BNDdX10KTfFM6Y1u/2+s2dgf6oZM9Vs1w23VCG7f/dkc/MPw==
)
 

AnrDaemon

Продвинутый новичок
С самого начала. Откуда у вас этот массив?
И если на то пошло, зачем к нему применять rawurldecode?
 

AnrDaemon

Продвинутый новичок
А нормализацию XML кто за вас делать будет перед проверкой?
 

kimisa

Новичок
@kimisa, на сайте системы, с которой вы работаете, нет описания и примеров?
Если бы так было, то не стала сюда писать. Да и я первый раз имею дело с сертификатами. Способ формирования подписи идет на с#. И там прекрасно кодируется массив байтов. Чего в языке пхп нет (((
 

kimisa

Новичок
Она не нужна. Всю инфу я и так прекрасно считала и проверила. Теперь нужно проверить подпись. И вот тут и возникает проблема. То что работает в с# не значит что работает в пхп. Вот и нужно понять что здесь нужно сделать. Еще раз повторюсь - я первый раз работаю с сертификатами.
 

kimisa

Новичок
Вопрос закрыт. Дело было в том, что здесь другой сертификат используется. Т.е. проблема была как таковой не у меня.
 
Сверху