Синтаксис и применение ХешированиеДанных.Добавить в платформе 1С:Предприятие. Описание и примеры кода.
Синтаксис
Добавить(<ДвоичныеДанные>)Добавить(<Текст>)Добавить(<Поток>, <Количество>)Полное описание, параметры и ограничения
ХешированиеДанных.Добавить (DataHashing.Append)
ХешированиеДанных (DataHashing)
Добавить (Append)
Доступен, начиная с версии 8.3.1.
Вариант синтаксиса: Добавить двоичные данные
Синтаксис:
Добавить(<ДвоичныеДанные>)
Параметры:
<ДвоичныеДанные> (обязательный)
Тип: ДвоичныеДанные.
Добавляемые двоичные данные.
Описание варианта метода:
Обновляет хеш-сумму, с учетом добавления двоичных данных.
Вариант синтаксиса: Добавить текстовые данные
Синтаксис:
Добавить(<Текст>)
Параметры:
<Текст> (обязательный)
Тип: Строка.
Добавляемые текстовые данные (в UTF8 кодировке).
Описание варианта метода:
Обновляет хеш-сумму, с учетом добавления текстовых данных.
Вариант синтаксиса: Добавить данные из потока
Синтаксис:
Добавить(<Поток>, <Количество>)
Параметры:
<Поток> (обязательный)
Тип: Поток.
Поток, из которого получаются данные для обновления хеш-суммы.
<Количество> (необязательный)
Тип: Число.
Количество байтов, которые читаются из потока и участвуют в обновлении хеш-суммы. Если количество не задано, то читаются все данные до конца потока.
Описание варианта метода:
Обновляет хеш-сумму с учетом добавления данных из потока.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.1.
Методическая информация
Практические примеры
Посчитать SHA-256 и проверить последовательное добавление частей
Хеш одного блока abc должен совпадать с хешем двух последовательно добавленных блоков a и bc. Кодировка и отсутствие BOM заданы явно.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Выполняйте на сервере. Не добавляйте перевод строки или BOM к abc.
Используется SHA-256; результат ХешСумма этого алгоритма — двоичные данные.
ПолныеДанные = ПолучитьДвоичныеДанныеИзСтроки("abc", КодировкаТекста.UTF8, Ложь);
Хеш = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеш.Добавить(ПолныеДанные);
ПолнаяСумма = ВРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеш.ХешСумма));
ПоЧастям = Новый ХешированиеДанных(ХешФункция.SHA256);
ПоЧастям.Добавить(ПолучитьДвоичныеДанныеИзСтроки("a", КодировкаТекста.UTF8, Ложь));
ПоЧастям.Добавить(ПолучитьДвоичныеДанныеИзСтроки("bc", КодировкаТекста.UTF8, Ложь));
СуммаЧастей = ВРег(ПолучитьHexСтрокуИзДвоичныхДанных(ПоЧастям.ХешСумма));
Сообщить(ПолнаяСумма);
Сообщить(ПолнаяСумма = СуммаЧастей);
Сообщить(Хеш.ХешФункция);
Ожидаемая = "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD";
Сообщить(ПолнаяСумма = Ожидаемая);Разбор по шагам
Явно кодируем исходный текст, чтобы хеш зависел от понятной последовательности байтов.
Первый объект получает весь блок, второй — две части в исходном порядке.
Преобразуем хеш в Hex и приводим регистр для сравнения представлений.
Сравниваем оба результата и заранее известную контрольную сумму abc.
Как проверить результат
Оба сравнения равны Истина; Hex совпадает с Ожидаемая.
Замените bc на cb: сравнение хешей должно стать Ложь — порядок байтов важен.
Ожидаемый результат
SHA-256 одинаков для одинаковых байтов независимо от разбивки на части.
На что обратить внимание
Хеш без доверенного эталона не доказывает подлинность отправителя; для этого нужен согласованный механизм подписи или MAC.
Обычный SHA-256 не предназначен для самостоятельного хранения пользовательских паролей.
ХешФункция.CRC32 возвращает другой тип результата: не переносите преобразование в Hex двоичных данных на все алгоритмы автоматически.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.