К статье
Практический материал

Разработка и Конфигурация · 12 мин

Что такое хеш в 1С и как работает хеширование данных

Что такое хеш в 1С: функция ХешированиеДанных, алгоритмы MD5, SHA-256, CRC32, хранение паролей и контрольные суммы. Примеры кода и практические советы.

Хеш в 1С — это результат необратимого преобразования произвольных данных (строки, файла, двоичных данных) в строку фиксированной длины по определённому алгоритму. Одинаковые исходные данные всегда дают одинаковый хеш, а изменение хотя бы одного байта полностью меняет результат. Это свойство делает хеширование основным инструментом для проверки целостности файлов, хранения паролей и сравнения больших объёмов данных без их построчного перебора.

Во встроенном языке 1С хеширование реализовано через объект ХешированиеДанных, доступный и на сервере, и на толстом клиенте. Платформа поддерживает несколько алгоритмов — MD5, SHA-1, SHA-256, SHA-512 и CRC32, — каждый из которых подходит для своих задач. Важно понимать: хеш нельзя «расшифровать» обратно, это не шифрование, а одностороннее преобразование.

На практике разработчик 1С сталкивается с хешами при интеграции с веб-сервисами (подпись запросов), при загрузке файлов (проверка, что файл не повреждён), при дедупликации данных и при работе с механизмами аутентификации. Ниже разберём, какие алгоритмы доступны, как вычислить хеш в коде и каких ошибок стоит избегать.

Что такое хеш и зачем он нужен в 1С

Хеш-функция принимает на вход данные любого размера и возвращает строку-«отпечаток» фиксированной длины. Например, хеш MD5 всегда занимает 32 шестнадцатеричных символа, независимо от того, хешировали вы одно слово или файл на несколько гигабайт. Это удобно: вместо сравнения двух больших файлов побайтово достаточно сравнить два коротких хеша.

Ключевые свойства хеша: детерминированность (одинаковый вход — одинаковый результат), необратимость (по хешу нельзя восстановить данные) и чувствительность к изменениям (правка одного символа меняет весь хеш). Однако у хешей есть и коллизии — теоретически два разных набора данных могут дать одинаковый хеш, поэтому для критичных задач выбирают стойкие алгоритмы.

В экосистеме 1С хеши применяются в нескольких типовых сценариях: контроль целостности загруженных файлов, генерация уникальных ключей для кэширования, подпись запросов к внешним API, хранение паролей пользователей информационной базы и сравнение версий конфигурации. Понимание механизма помогает правильно выбрать алгоритм и не допустить уязвимостей.

Какие алгоритмы хеширования поддерживает платформа 1С

Платформа 1С:Предприятие предоставляет перечисление ХешФункция с несколькими алгоритмами. Выбор конкретного зависит от задачи: где-то важна скорость, где-то — стойкость к подбору, а иногда алгоритм продиктован требованиями внешнего сервиса, с которым вы интегрируетесь.

АлгоритмДлина хешаТипичное применениеОграничения
CRC328 символов (hex)Быстрый контроль целостности, контрольные суммыНе криптостойкий, высокая вероятность коллизий
MD532 символа (hex)Сравнение файлов, дедупликация, совместимость со старыми APIСчитается уязвимым, не подходит для паролей и подписей
SHA-140 символов (hex)Интеграции, где требуется именно SHA-1Признан устаревшим для криптографических задач
SHA-25664 символа (hex)Подписи, пароли, проверка целостности с высокими требованиямиМедленнее MD5, что редко критично
SHA-512128 символов (hex)Задачи с максимальной стойкостьюДлинный результат, избыточен для простых проверок

Практическое правило: для технической проверки «файл не изменился» достаточно CRC32 или MD5, а для всего, что связано с безопасностью — паролей, подписей, токенов — используйте SHA-256 или SHA-512. Если внешний сервис требует конкретный алгоритм, придётся использовать именно его, даже если он устарел.

Выбор алгоритма

CRC32 / MD5

Подходят для быстрой технической проверки целостности и поиска дублей. Не используйте для защиты данных — коллизии и уязвимости делают их ненадёжными.

SHA-256

Универсальный выбор для безопасности: подписи запросов, хранение паролей, проверка подлинности. Разумный баланс стойкости и скорости.

SHA-512

Для задач с максимальными требованиями к стойкости. Минус — длинный хеш, который неудобно хранить и передавать там, где это не нужно.

Как вычислить хеш в коде 1С

Для вычисления хеша создаётся объект ХешированиеДанных с указанием алгоритма, затем методом Добавить() передаются данные — строка, двоичные данные или путь к файлу. Результат доступен в свойстве ХешСумма в виде двоичных данных, которые обычно преобразуют в шестнадцатеричную строку.

Типовой пример вычисления MD5 от строки выглядит так:

Хеширование = Новый ХешированиеДанных(ХешФункция.MD5);

Хеширование.Добавить("Строка для хеширования");

ХешСтрока = НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма));

Для хеширования файла удобнее использовать метод ДобавитьФайл() — он читает файл порциями, поэтому подходит даже для больших файлов без загрузки всего содержимого в память:

Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);

Хеширование.ДобавитьФайл("C:\Данные\выгрузка.xml");

КонтрольнаяСумма = Хеширование.ХешСумма;

Обратите внимание на кодировку: метод Добавить() со строкой использует UTF-8. Если внешняя система считает хеш от строки в другой кодировке (например, Windows-1251), результаты не совпадут. В таком случае строку нужно сначала преобразовать в двоичные данные с нужной кодировкой через ПолучитьДвоичныеДанныеИзСтроки() с явным указанием кодировки.

1c
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.Добавить(Пароль + Соль);
ХешПароля = НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма));

Хеширование паролей пользователей

Пароли пользователей информационной базы 1С не хранятся в открытом виде — платформа автоматически сохраняет их хеши. При входе пользователя система вычисляет хеш введённого пароля и сравнивает его с сохранённым. Это стандартная практика: даже при утечке базы злоумышленник получит только хеши, а не сами пароли.

Если вы разрабатываете собственный механизм аутентификации (например, для внешних пользователей портала или мобильного приложения), никогда не храните пароли открытым текстом и не используйте «голый» хеш без соли. Соль — случайная строка, которая добавляется к паролю перед хешированием. Она защищает от подбора по готовым таблицам хешей распространённых паролей.

Схема безопасного хранения: для каждого пользователя генерируется уникальная соль, вычисляется хеш от конкатенации пароля и соли (SHA-256 или SHA-512), и в базе сохраняются оба значения — хеш и соль. При проверке пароля операция повторяется с сохранённой солью. Соль не является секретом, её задача — сделать каждый хеш уникальным.

Проверка целостности файлов и сравнение данных

Одна из самых частых прикладных задач — убедиться, что файл при передаче не повредился и не был изменён. Схема проста: отправитель вычисляет хеш файла и передаёт его вместе с файлом (или отдельно), получатель вычисляет хеш заново и сравнивает. Совпадение означает, что файл дошёл без изменений.

В обменах между базами 1С хеши используют для дедупликации: вместо сравнения всех полей объекта вычисляется хеш от ключевых реквизитов, и по нему быстро определяется, изменился объект или нет. Это заметно ускоряет синхронизации, где нужно обработать тысячи записей.

Ещё один сценарий — кэширование. Хеш от параметров запроса или настроек отчёта может служить ключом кэша: если хеш совпал с сохранённым, результат уже готов и пересчитывать его не нужно. Здесь достаточно быстрого MD5 или CRC32, криптостойкость не требуется.

Проверка целостности файла
  1. 1
    Получите от отправителя эталонный хеш и уточните алгоритм (MD5, SHA-256 и т.д.)
  2. 2
    В 1С создайте объект ХешированиеДанных с тем же алгоритмом
  3. 3
    Вызовите ДобавитьФайл() с путём к полученному файлу
  4. 4
    Сравните полученный хеш с эталонным, приведя оба к одному регистру
  5. 5
    При совпадении файл цел; при расхождении запросите файл повторно

Хеши в интеграциях и подпись запросов

Многие внешние API — платёжные шлюзы, службы доставки, банковские сервисы — требуют подписывать запросы хешем. Обычно схема такая: параметры запроса объединяются в строку в строго заданном порядке, добавляется секретный ключ, от результата вычисляется хеш (чаще MD5 или SHA-256), который и передаётся как подпись. Сервер повторяет вычисление и сверяет подпись.

Главные источники проблем при такой интеграции — порядок параметров, регистр символов и кодировка. Документация внешнего сервиса обычно точно описывает, как формируется строка для подписи: малейшее отклонение (лишний пробел, другой регистр хеша, иная кодировка) приводит к несовпадению подписи. Отлаживать удобно на тестовом примере из документации, где известны и входные данные, и ожидаемый хеш.

Также учитывайте, что часть сервисов использует HMAC — хеш с ключом по специальному алгоритму, а не простую конкатенацию. В 1С для этого есть объект ХешированиеДанныхHMAC в новых версиях платформы, либо HMAC реализуется программно. Уточняйте в документации сервиса, что именно требуется.

Типичные ошибки
01
Считать хеш от строки в неправильной кодировке — результат не совпадёт с внешней системой. Явно указывайте кодировку при преобразовании в двоичные данные.
02
Использовать MD5 или SHA-1 для паролей и подписей там, где требуется стойкость. Для безопасности берите SHA-256 и выше, для паролей — с солью.
03
Сравнивать хеши без приведения к одному регистру: один сервис возвращает hex в верхнем регистре, другой — в нижнем. Перед сравнением применяйте НРег() или ВРег().
04
Пытаться «расшифровать» хеш. Это невозможно по определению — хеширование одностороннее; проверка делается только повторным вычислением и сравнением.

Частые ошибки и ограничения

Помимо перечисленных выше, стоит помнить о производительности. Хеширование большого файла — операция, которая занимает заметное время, особенно со стойкими алгоритмами. Если хеш вычисляется в интерактивном режиме на клиенте, интерфейс может «подвиснуть»; для тяжёлых операций используйте фоновые задания на сервере.

Ещё одно ограничение: объект ХешированиеДанных недоступен на тонком и веб-клиенте в ряде контекстов, поэтому вычисления надёжнее выполнять в серверных процедурах. Если хеш нужен на клиенте, вызывайте серверный метод.

Наконец, не используйте хеш как идентификатор уникальности без учёта коллизий в критичных задачах. Для MD5 и CRC32 вероятность совпадения хешей у разных данных выше, чем у SHA-256. Если от уникальности зависит корректность учёта, либо берите стойкий алгоритм, либо при совпадении хеша дополнительно сравнивайте сами данные.

Контрольные точки

Как проверить результат

Совпадение хеша с эталоном
Норма

Хеши совпадают посимвольно после приведения к одному регистру

Тревожный признак

Хеши различаются — проверьте кодировку, порядок параметров и алгоритм

Длина hex-строки
Норма

MD5 — 32 символа, SHA-256 — 64, SHA-512 — 128

Тревожный признак

Длина другая — вероятно, результат не преобразован из двоичных данных в hex

Повторное вычисление
Норма

Одинаковые входные данные стабильно дают одинаковый хеш

Тревожный признак

Хеш меняется при тех же данных — где-то подмешиваются случайные или изменяемые значения

Итог

Что важно запомнить

Хеш в 1С вычисляется объектом ХешированиеДанных и служит для проверки целостности, сравнения данных, подписей и хранения паролей. Для безопасности используйте SHA-256/SHA-512 с солью, для технических проверок достаточно CRC32 или MD5. Хеш необратим: проверка всегда выполняется повторным вычислением и сравнением.

Частые вопросы о хешах в 1С

Можно ли восстановить данные или пароль из хеша?

Нет, хеширование — односторонняя операция, обратного преобразования не существует. Пароль «восстанавливают» только подбором: вычисляют хеши от словаря вариантов и сравнивают с исходным. Именно поэтому важны сложные пароли и соль — они делают подбор практически бессмысленным.

Какой алгоритм выбрать для проверки целостности файла?

Если нужно просто убедиться, что файл не повреждён при передаче, достаточно CRC32 или MD5 — они быстрые. Если важно исключить злонамеренную подмену файла, используйте SHA-256: подделать файл с тем же хешем для него практически невозможно.

Почему мой хеш не совпадает с хешем внешнего сервиса?

Чаще всего причины в кодировке строки (нужна та, которую ждёт сервис, обычно UTF-8), регистре hex-строки, порядке и разделителях параметров при формировании подписи, а также в лишних пробелах или переносах строк. Сверьтесь с тестовым примером из документации сервиса, где приведён ожидаемый результат.

Чем хеширование отличается от шифрования?

Шифрование обратимо: зашифрованные данные можно расшифровать ключом. Хеширование необратимо и служит не для сокрытия данных, а для их «отпечатка». Пароли хешируют, а не шифруют, потому что системе не нужно знать сам пароль — достаточно уметь проверять его совпадение.

Можно ли вычислить хеш на тонком клиенте 1С?

Объект ХешированиеДанных имеет ограничения по доступности на тонком и веб-клиенте, поэтому надёжный вариант — выполнять вычисление в серверной процедуре и возвращать результат на клиент. Заодно это снимает нагрузку с клиентского компьютера при хешировании больших файлов.

Что такое соль и зачем она при хешировании паролей?

Соль — случайная строка, добавляемая к паролю перед вычислением хеша. У каждого пользователя соль своя. Она делает бесполезными готовые таблицы хешей популярных паролей: даже у двух пользователей с одинаковым паролем хеши будут разными. Соль хранится в базе рядом с хешем и не является секретом.