Подпись данных SHA256

1. user1232351 08.03.21 19:17 Сейчас в теме
Как рассчитать подпись данных алгоритмом HMAC-SHA256?
Пробую делать так:
    ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256);
    ХешированиеДанных.Добавить(СтрокаСДанными);
    ХешированиеДанных.Добавить(Секретныйключ);    
    Подпись = НРег(СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""));


Но подпись не совпадает при проверке на php.
По теме из базы знаний
Найденные решения
9. user1232351 08.03.21 23:31 Сейчас в теме
(5)Оказывается есть общий модуль РаботаВМоделиСервисаБТС и в нем есть функция Подпись. Правда она возвращает подпись в формате Base64. В итоге сделал:
СекретныйКлюч = ПолучитьДвоичныеДанныеИзСтроки(СекретныйКлюч);
Подпись64 = РаботаВМоделиСервисаБТС.Подпись(СекретныйКлюч, СтрокаСДанными);
Подпись = НРег(СтрЗаменить( Base64Значение(Подпись64), " ", ""));

И все заработало. Спасибо за наводку)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 08.03.21 22:14 Сейчас в теме
(1) Возьмите и проверьте в онлайн генераторах, кто правильно кодирует.
Кодируете двоичные данные или строку?
Вот этот код:
ХешированиеДанных.Добавить(СтрокаСДанными);
ХешированиеДанных.Добавить(Секретныйключ);

добавляет вторую строку сразу же, без разделителей.
Т.е. к примеру
СтрокаСДанными = "Это текст"
СекретныйКлюч = "123"
В итоге будет закодирована строка "Это текст123". В php так же сделано?
7. user1232351 08.03.21 23:01 Сейчас в теме
(5)Если отдельно проверяю в генераторе СтрокаСДанными и Секретныйключ, то кодируется правильно.
По инструкции php
 hash_hmac('sha256', $concatenated, $api_key, false);

В php как сделано не знаю.
10. spacecraft 08.03.21 23:31 Сейчас в теме
(7)
hash_hmac

Это не просто конкатенация данных с ключем, а предварительная XOR обработка их, перед шифрованием.
8. user1232351 08.03.21 23:07 Сейчас в теме
(5)
Секретныйключ

Для данных и ключа использую метод ПолучитьДвоичныеДанныеИзСтроки
9. user1232351 08.03.21 23:31 Сейчас в теме
(5)Оказывается есть общий модуль РаботаВМоделиСервисаБТС и в нем есть функция Подпись. Правда она возвращает подпись в формате Base64. В итоге сделал:
СекретныйКлюч = ПолучитьДвоичныеДанныеИзСтроки(СекретныйКлюч);
Подпись64 = РаботаВМоделиСервисаБТС.Подпись(СекретныйКлюч, СтрокаСДанными);
Подпись = НРег(СтрЗаменить( Base64Значение(Подпись64), " ", ""));

И все заработало. Спасибо за наводку)
2. Dmitrij-2 47 08.03.21 21:19 Сейчас в теме
Кодировка строк в 1С и в php совпадает?
3. user1232351 08.03.21 21:27 Сейчас в теме
(2)
Кодировка строк в 1С
UTF8
4. Dmitrij-2 47 08.03.21 22:01 Сейчас в теме
6. spacecraft 08.03.21 22:17 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот