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

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

Как зашифровать строку в 1С: рабочие способы и примеры кода

Как зашифровать строку в 1С: хеширование SHA-256, MD5, симметричное шифрование через ХранилищеЗначения и внешние средства. Примеры кода и типичные ошибки.

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

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

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

Хеширование строки через ХешированиеДанных

Объект ХешированиеДанных доступен на сервере и толстом клиенте. Он принимает данные в виде двоичных данных или потока, поэтому строку предварительно нужно преобразовать. Простейший способ — получить хеш через ПолучитьДвоичныеДанныеИзСтроки.

Функция ХешСтроки(ИсходнаяСтрока)

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

Хеширование.Добавить(ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока));

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

КонецФункции

Результат — строка из 64 шестнадцатеричных символов для SHA-256. Одинаковая входная строка всегда даёт одинаковый хеш, поэтому хеш подходит для сравнения значений без хранения оригинала: например, для проверки пароля при входе или контроля целостности файлов.

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

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

Выбор алгоритма: MD5, SHA-1 или SHA-256

Платформа поддерживает несколько хеш-функций через перечисление ХешФункция: CRC32, MD5, SHA-1, SHA-256 и другие. Они различаются стойкостью и назначением.

АлгоритмДлина результатаГде уместенОграничения
CRC328 hex-символовКонтроль целостности, контрольные суммыНе криптостойкий, легко подобрать коллизию
MD532 hex-символаСовместимость со старыми системами, контрольные суммы файловСчитается уязвимым к коллизиям, для паролей не рекомендуется
SHA-140 hex-символовИнтеграции, где внешняя система требует именно егоПризнан устаревшим для защиты данных
SHA-25664 hex-символаПароли, токены, подписи данныхДля паролей всё равно нужна соль

Для новых разработок берите SHA-256. MD5 и SHA-1 оправданы только тогда, когда внешняя система (банк, веб-сервис, старая конфигурация) уже работает с этим алгоритмом и вы обязаны ему соответствовать.

Обратимое шифрование строки

Встроенного метода симметричного шифрования (типа AES) в языке 1С нет. На практике применяют три подхода.

Безопасное хранилище в БСП

В конфигурациях на базе Библиотеки стандартных подсистем есть общий модуль ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище. Данные записываются в безопасное хранилище и не отображаются в интерфейсе, а владельцу данных доступны для чтения программно. Так в типовых решениях хранят пароли к почте, FTP и обменам с банками.

ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(

ВладелецДанных, СекретнаяСтрока, "ПарольAPI");

Внешние криптопровайдеры

Для полноценного шифрования (AES, ГОСТ) используют внешние компоненты или вызовы средств операционной системы: КриптоПро, PowerShell, OpenSSL через командную строку. 1С передаёт строку наружу, получает зашифрованный результат и хранит его в виде строки Base64 или Hex. Ключ шифрования при этом хранится отдельно от базы.

Собственная реализация — только для учебных целей

XOR с ключом или «самодельные» алгоритмы на встроенном языке не дают реальной защиты: такие схемы вскрываются элементарно. Использовать их для паролей и персональных данных недопустимо.

Кодирование — это не шифрование

Частая ошибка — выдавать Base64 за шифрование. Функции Base64Строка и Base64Значение лишь преобразуют данные в текстовый вид для передачи по протоколам. Любой, кто видит строку Base64, восстановит оригинал за секунду без всякого ключа.

Base64 уместен как транспортный формат: например, зашифрованные внешним средством двоичные данные удобно хранить в строковом реквизите именно в Base64. Но сам по себе он защиты не даёт.

Типичные ошибки
01
Использовать Base64 как «шифрование» — строка раскрывается без ключа
02
Хешировать пароль без соли — короткие пароли подбираются по готовым таблицам хешей
03
Хранить ключ рядом с зашифрованными данными — защита теряет смысл
04
Сравнивать хеши с учётом регистра — hex-строки от разных реализаций могут отличаться регистром символов
05
Шифровать на клиенте и передавать ключ по открытому каналу

Проверка результата

После внедрения хеширования проверьте три вещи. Во-первых, детерминированность: одна и та же строка должна давать одинаковый хеш при повторных вызовах. Во-вторых, чувствительность к входным данным: изменение одного символа или регистра должно полностью менять результат. В-третьих, сопоставимость с эталоном: хеш строки «123» по SHA-256 можно сверить с любым онлайн-калькулятором — значения обязаны совпасть.

Если хеш не совпадает с внешней системой, чаще всего виноваты кодировка строки (UTF-8 против ANSI), невидимые символы (перевод строки, пробел, BOM) или разный порядок конкатенации соли и пароля.

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

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

Повторный вызов с той же строкой
Норма

Хеш идентичен предыдущему

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

Хеш меняется при тех же входных данных

Изменение одного символа в строке
Норма

Хеш полностью другой

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

Хеш похож или совпадает

Сверка с эталонным калькулятором SHA-256
Норма

Значения совпадают

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

Расхождение — проверяйте кодировку и скрытые символы

Что выбрать в вашей ситуации

Итоговый выбор сводится к простому маршруту: определите, нужно ли вам когда-либо получить исходную строку обратно.

Маршрут решения

Как выбрать действие

Нужно только проверять совпадение (пароль при входе, контроль данных)Используйте ХешированиеДанных с SHA-256 и солью
Строку нужно будет расшифровать (пароль к внешнему API)Используйте безопасное хранилище БСП или внешний криптопровайдер
Нужно передать двоичные данные текстомИспользуйте Base64, но не считайте это шифрованием
Внешняя система требует конкретный алгоритм (MD5, SHA-1)Реализуйте его для совместимости, но не применяйте внутри своей базы для защиты

Частые вопросы

Можно ли расшифровать хеш SHA-256 обратно в строку?

Нет, хеширование математически необратимо. Восстановить исходную строку можно только перебором вариантов и сравнением хешей, что для длинных и случайных строк практически невозможно. Если нужна обратимость — используйте шифрование с ключом.

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

Соль — случайная добавка к строке перед хешированием, она хранится открыто рядом с хешем и нужна только для защиты от перебора по словарю. Ключ шифрования — секрет, без которого невозможно расшифровать данные; его нельзя хранить рядом с зашифрованными значениями.

Работает ли ХешированиеДанных на тонком клиенте?

Объект доступен на сервере, толстом клиенте и в веб-клиенте с ограничениями. В типовых решениях хеширование принято выполнять в серверных процедурах — это надёжнее и не раскрывает логику на клиенте.

Как зашифровать строку по ГОСТ в 1С?

Встроенных ГОСТ-алгоритмов в платформе нет. Используется внешний криптопровайдер (например, КриптоПро CSP) через COM-объект, внешнюю компоненту или вызов утилиты командной строки, а 1С лишь передаёт данные и получает результат.

Где в типовой 1С хранить пароль к внешнему сервису?

В конфигурациях на БСП — в безопасном хранилище через методы ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище и ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища. В самописных конфигурациях — в зашифрованном виде с ключом вне базы.

Итог

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

Для проверки совпадения строк используйте SHA-256 через ХешированиеДанных с солью. Для обратимой защиты — безопасное хранилище БСП или внешние криптосредства. Base64 — не шифрование, а ключ никогда не хранится рядом с данными.