Base64 и хеш-суммы для 1С: MD5, SHA-1, SHA-256, CRC32, HMAC
Закодируйте строку в Base64 или раскодируйте обратно, посчитайте хеш-суммы и подпись HMAC. Текст переводится в байты в кодировке UTF-8, как ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8). Сравнивайте результат со значением из своего кода при интеграции с API.
| Base64 | | |
|---|---|---|
| MD5 | | |
| SHA-1 | | |
| SHA-256 | | |
| CRC32 | | |
| HMAC-SHA256 | | |
| HMAC-SHA1 | |
Код 1С
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8); // Base64 и обратно СтрокаBase64 = ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные); СтрокаBase64 = СтрЗаменить(СтрЗаменить(СтрокаBase64, Символы.ВК, ""), Символы.ПС, ""); Исходный = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзBase64Строки(СтрокаBase64), КодировкаТекста.UTF8); // MD5, SHA-1, SHA-256: замените ХешФункция.SHA256 на MD5 или SHA1 Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); Хеширование.Добавить(ДвоичныеДанные); Хеш = НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма)); // CRC32: ХешСумма возвращает число Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32); Хеширование.Добавить(ДвоичныеДанные); CRC = Хеширование.ХешСумма;
HMAC собирается из ХешированиеДанных по стандартной схеме — готовая функция в статье «Хеширование HMAC-SHA1 и HMAC-SHA256 средствами 1С».
Частые ошибки при сравнении хешей
- Кодировка. Хеш от строки в UTF-8 и в UTF-16 разный. Явно указывайте кодировку при получении двоичных данных.
- Регистр.
ПолучитьHexСтрокуИзДвоичныхДанныхвозвращает заглавные буквы, а многие API ждут строчные: используйтеНРег(). - Переносы строк. Base64 из 1С может содержать переносы строк для длинных данных. Перед отправкой в API удалите их через
СтрЗаменить. - Лишний перевод строки в конце. Текст из файла часто заканчивается символом перевода строки — он меняет хеш.
Частые вопросы
Есть ли в 1С функция HMAC?
Отдельной функции нет. HMAC собирают из ХешированиеДанных по стандартной схеме с ключом и двумя проходами — готовая функция разобрана в статье про HMAC-SHA1 и HMAC-SHA256.
Какие хеш-функции поддерживает ХешированиеДанных?
Перечисление ХешФункция содержит MD5, SHA1, SHA256 и CRC32. CRC32 возвращает число, остальные — двоичные данные.