@sxxxe337

Как формируется цифровая подпись?

Нужно сформировать цифровую подпись, но хеши не совпадают
как я понял логику (строка $sign)
1. объединяется массив в строку (без разделителя?)
2. шифруется методом sha1 с ключем
3. кодируется base64
4. шифруется методом md5
5. кодируется base64

или что-то не так?
просто нет возможности добавить на сайт php код, только javascript или nodejs

весь код
$clientID = 123;
$secret = 'qwertyuiop123456';

$data = [
   'CLIENT_ID' => $clientID,
   'INVOICE_ID' => '1',
   'AMOUNT' => '100',
   'CURRENCY' => 'USD',
   'PAYMENT_CURRENCY' => 'qiwi',
   'DESCRIPTION' => 'Test payment',
   'SUCCESS_URL' => 'https://test.ru/success/1',
   'FAIL_URL' => 'https://test.ru/fail/1',
   'STATUS_URL' => 'https://test.ru/status/1'
];
$sign = base64_encode(md5($secret . base64_encode(sha1(implode('', $data), true)) . $secret, true));

$data['SIGN_ORDER'] = implode(';', array_keys($data));
$data['SIGN'] = $sign;
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
1. массив объединяется в строку без разделителя
2. результат шифруется методом sha1 без всяких "ключей", с бинарным выводом
3. результат кодируется base64
4. к результату добавляется секретный ключ спереди и сзади
5. результат шифруется методом md5 с бинарным выводом
6. результат кодируется base64

В целом этот этот алгоритм выглядит так, как будто его составлял пятиклассник, где-то краем уха слашавший про хэширование. Я бы не доверял платёжной системе, которая подписывает транзакции таким способом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Полностью согласен с FanatPHP. А по вашему вопросу: скорее всего вы проигнорировали какое то требование типа расположения параметров в $data строго в алфавитном порядке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы