Разработка и Конфигурация · 8 мин
Как зашифровать строку в 1С: рабочие способы и примеры кода
Как зашифровать строку в 1С: хеширование SHA-256, MD5, симметричное шифрование через ХранилищеЗначения и внешние средства. Примеры кода и типичные ошибки.
Задача зашифровать строку в 1С возникает при хранении паролей, токенов доступа к API, персональных данных и при обмене с внешними системами. Встроенного «одного метода шифрования» в платформе нет, поэтому выбор зависит от цели: проверить совпадение значения без хранения оригинала (хеширование) или сохранить данные с возможностью расшифровки (обратимое шифрование).
В платформе 1С:Предприятие 8.3 доступен объект ХешированиеДанных, который вычисляет хеш по алгоритмам MD5, SHA-1, SHA-256 и другим. Для обратимого шифрования разработчики используют либо скрытие значений через типовые механизмы БСП, либо внешние криптографические средства. Ниже разобраны практические варианты с примерами кода.
Важно сразу разделить два понятия: хеширование необратимо — из хеша нельзя восстановить исходную строку, а шифрование подразумевает наличие ключа и возможность расшифровки. Путаница между ними — самая частая причина неправильной архитектуры защиты данных в учётных системах.
Хеширование строки через ХешированиеДанных
Объект ХешированиеДанных доступен на сервере и толстом клиенте. Он принимает данные в виде двоичных данных или потока, поэтому строку предварительно нужно преобразовать. Простейший способ — получить хеш через ПолучитьДвоичныеДанныеИзСтроки.
Функция ХешСтроки(ИсходнаяСтрока)
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.Добавить(ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока));
Возврат НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма));
КонецФункции
Результат — строка из 64 шестнадцатеричных символов для SHA-256. Одинаковая входная строка всегда даёт одинаковый хеш, поэтому хеш подходит для сравнения значений без хранения оригинала: например, для проверки пароля при входе или контроля целостности файлов.
Учтите, что для коротких предсказуемых строк (пароли из 6 цифр, коды) хеш без «соли» легко подбирается перебором. Соль — это случайная добавка к строке перед хешированием, которая хранится рядом с хешем и делает перебор по словарю бессмысленным.
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.Добавить(ПолучитьДвоичныеДанныеИзСтроки(Соль + Пароль));
Хеш = ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма);Выбор алгоритма: MD5, SHA-1 или SHA-256
Платформа поддерживает несколько хеш-функций через перечисление ХешФункция: CRC32, MD5, SHA-1, SHA-256 и другие. Они различаются стойкостью и назначением.
| Алгоритм | Длина результата | Где уместен | Ограничения |
|---|---|---|---|
| CRC32 | 8 hex-символов | Контроль целостности, контрольные суммы | Не криптостойкий, легко подобрать коллизию |
| MD5 | 32 hex-символа | Совместимость со старыми системами, контрольные суммы файлов | Считается уязвимым к коллизиям, для паролей не рекомендуется |
| SHA-1 | 40 hex-символов | Интеграции, где внешняя система требует именно его | Признан устаревшим для защиты данных |
| SHA-256 | 64 hex-символа | Пароли, токены, подписи данных | Для паролей всё равно нужна соль |
Для новых разработок берите SHA-256. MD5 и SHA-1 оправданы только тогда, когда внешняя система (банк, веб-сервис, старая конфигурация) уже работает с этим алгоритмом и вы обязаны ему соответствовать.
Обратимое шифрование строки
Встроенного метода симметричного шифрования (типа AES) в языке 1С нет. На практике применяют три подхода.
Безопасное хранилище в БСП
В конфигурациях на базе Библиотеки стандартных подсистем есть общий модуль ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище. Данные записываются в безопасное хранилище и не отображаются в интерфейсе, а владельцу данных доступны для чтения программно. Так в типовых решениях хранят пароли к почте, FTP и обменам с банками.
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(
ВладелецДанных, СекретнаяСтрока, "ПарольAPI");
Внешние криптопровайдеры
Для полноценного шифрования (AES, ГОСТ) используют внешние компоненты или вызовы средств операционной системы: КриптоПро, PowerShell, OpenSSL через командную строку. 1С передаёт строку наружу, получает зашифрованный результат и хранит его в виде строки Base64 или Hex. Ключ шифрования при этом хранится отдельно от базы.
Собственная реализация — только для учебных целей
XOR с ключом или «самодельные» алгоритмы на встроенном языке не дают реальной защиты: такие схемы вскрываются элементарно. Использовать их для паролей и персональных данных недопустимо.
Кодирование — это не шифрование
Частая ошибка — выдавать Base64 за шифрование. Функции Base64Строка и Base64Значение лишь преобразуют данные в текстовый вид для передачи по протоколам. Любой, кто видит строку Base64, восстановит оригинал за секунду без всякого ключа.
Base64 уместен как транспортный формат: например, зашифрованные внешним средством двоичные данные удобно хранить в строковом реквизите именно в Base64. Но сам по себе он защиты не даёт.
Проверка результата
После внедрения хеширования проверьте три вещи. Во-первых, детерминированность: одна и та же строка должна давать одинаковый хеш при повторных вызовах. Во-вторых, чувствительность к входным данным: изменение одного символа или регистра должно полностью менять результат. В-третьих, сопоставимость с эталоном: хеш строки «123» по SHA-256 можно сверить с любым онлайн-калькулятором — значения обязаны совпасть.
Если хеш не совпадает с внешней системой, чаще всего виноваты кодировка строки (UTF-8 против ANSI), невидимые символы (перевод строки, пробел, BOM) или разный порядок конкатенации соли и пароля.
Как проверить результат
Хеш идентичен предыдущему
Хеш меняется при тех же входных данных
Хеш полностью другой
Хеш похож или совпадает
Значения совпадают
Расхождение — проверяйте кодировку и скрытые символы
Что выбрать в вашей ситуации
Итоговый выбор сводится к простому маршруту: определите, нужно ли вам когда-либо получить исходную строку обратно.
Как выбрать действие
Частые вопросы
Можно ли расшифровать хеш SHA-256 обратно в строку?
Нет, хеширование математически необратимо. Восстановить исходную строку можно только перебором вариантов и сравнением хешей, что для длинных и случайных строк практически невозможно. Если нужна обратимость — используйте шифрование с ключом.
Чем отличается соль от ключа шифрования?
Соль — случайная добавка к строке перед хешированием, она хранится открыто рядом с хешем и нужна только для защиты от перебора по словарю. Ключ шифрования — секрет, без которого невозможно расшифровать данные; его нельзя хранить рядом с зашифрованными значениями.
Работает ли ХешированиеДанных на тонком клиенте?
Объект доступен на сервере, толстом клиенте и в веб-клиенте с ограничениями. В типовых решениях хеширование принято выполнять в серверных процедурах — это надёжнее и не раскрывает логику на клиенте.
Как зашифровать строку по ГОСТ в 1С?
Встроенных ГОСТ-алгоритмов в платформе нет. Используется внешний криптопровайдер (например, КриптоПро CSP) через COM-объект, внешнюю компоненту или вызов утилиты командной строки, а 1С лишь передаёт данные и получает результат.
Где в типовой 1С хранить пароль к внешнему сервису?
В конфигурациях на БСП — в безопасном хранилище через методы ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище и ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища. В самописных конфигурациях — в зашифрованном виде с ключом вне базы.
Что важно запомнить
Для проверки совпадения строк используйте SHA-256 через ХешированиеДанных с солью. Для обратимой защиты — безопасное хранилище БСП или внешние криптосредства. Base64 — не шифрование, а ключ никогда не хранится рядом с данными.