ХешированиеДанных

Типы · DataHashing

Реализует инкрементальный расчет хеш-суммы по добавленным данным. Способ расчета и тип вычисляемого значения определяются типом хеш-функции.

Полное описание, параметры и ограничения

ХешированиеДанных (DataHashing)

ХешированиеДанных (DataHashing)

Доступен, начиная с версии 8.3.1.

Свойства:
ХешСумма (HashSum)
ХешФункция (HashFunction)

Методы:
Добавить (Append)
ДобавитьФайл (AppendFile)

Конструкторы:
По указанной хеш-функции

Описание:

Реализует инкрементальный расчет хеш-суммы по добавленным данным. Способ расчета и тип вычисляемого значения определяются типом хеш-функции.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

См. также:
ХешФункция

Использование в версии:

Доступен, начиная с версии 8.3.1.

Методическая информация

Практические примеры

Посчитать SHA-256 и проверить последовательное добавление частей

Хеш одного блока abc должен совпадать с хешем двух последовательно добавленных блоков a и bc. Кодировка и отсутствие BOM заданы явно.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте на сервере. Не добавляйте перевод строки или BOM к abc.

  2. Используется SHA-256; результат ХешСумма этого алгоритма — двоичные данные.

ПолныеДанные = ПолучитьДвоичныеДанныеИзСтроки("abc", КодировкаТекста.UTF8, Ложь);
Хеш = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеш.Добавить(ПолныеДанные);
ПолнаяСумма = ВРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеш.ХешСумма));
ПоЧастям = Новый ХешированиеДанных(ХешФункция.SHA256);
ПоЧастям.Добавить(ПолучитьДвоичныеДанныеИзСтроки("a", КодировкаТекста.UTF8, Ложь));
ПоЧастям.Добавить(ПолучитьДвоичныеДанныеИзСтроки("bc", КодировкаТекста.UTF8, Ложь));
СуммаЧастей = ВРег(ПолучитьHexСтрокуИзДвоичныхДанных(ПоЧастям.ХешСумма));
Сообщить(ПолнаяСумма);
Сообщить(ПолнаяСумма = СуммаЧастей);
Сообщить(Хеш.ХешФункция);
Ожидаемая = "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD";
Сообщить(ПолнаяСумма = Ожидаемая);

Разбор по шагам

  1. Явно кодируем исходный текст, чтобы хеш зависел от понятной последовательности байтов.

  2. Первый объект получает весь блок, второй — две части в исходном порядке.

  3. Преобразуем хеш в Hex и приводим регистр для сравнения представлений.

  4. Сравниваем оба результата и заранее известную контрольную сумму abc.

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

  1. Оба сравнения равны Истина; Hex совпадает с Ожидаемая.

  2. Замените bc на cb: сравнение хешей должно стать Ложь — порядок байтов важен.

Ожидаемый результат

SHA-256 одинаков для одинаковых байтов независимо от разбивки на части.

На что обратить внимание

  1. Хеш без доверенного эталона не доказывает подлинность отправителя; для этого нужен согласованный механизм подписи или MAC.

  2. Обычный SHA-256 не предназначен для самостоятельного хранения пользовательских паролей.

  3. ХешФункция.CRC32 возвращает другой тип результата: не переносите преобразование в Hex двоичных данных на все алгоритмы автоматически.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.