Шрифт
Хеширование данных с ключом по алгоритму SHA-1 штатными средствами 1С
Play

Хеширование данных с ключом по алгоритму SHA-1 штатными средствами 1С

Потребовалось реализовать обмен данными с веб-сервером, одним из теребованием авторизации было хеширование данных с секретным ключом.

Пример реализации расчета хеш суммы данных по алгоритму SHA-1 с ключом штатными средствами 1С.

//Функция ХэшированиеШтатныеСредства(СтрокаJSON, Base64JSON ,КлючХешированияДанных = "")

Специальные предложения
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(2) ZaPaSoff, В моем варианте это

<pre style="color: blue; overflow: auto;"> <span style="color: green;">// кодируем данные в base64, возможно переделать на штатные средства</span> <span style="color: red;">Функция</span> ЗакодироватьВBase64<span style="color: red;">(</span>Данные<span style="color: red;">)</span>

СтрокаДанных <span style="color: red;">=</span> Строка<span style="color: red;">(</span>Данные<span style="color: red;">)</span><span style="color: red;">;</span>

WSH <span style="color: red;">=</span> <span style="color: red;">Новый</span> COMОбъект<span style="color: red;">(</span><span style="color: black;">"MSScriptControl.ScriptControl"</span><span style="color: red;">)</span><span style="color: red;">;</span> WSH<span style="color: red;">.</span>language <span style="color: red;">=</span> <span style="color: black;">"JScript"</span><span style="color: red;">;</span>

лКодbase64encode <span style="color: red;">=</span> <span style="color: black;">"</span> <span style="color: black;"> |function encode(input) </span> <span style="color: black;"> |</span> <span style="color: black;"> |// public method for decoding</span> <span style="color: black;"> |function decode(input) </span> <span style="color: black;"> |</span> <span style="color: black;"> |// private method for UTF-8 encoding</span> <span style="color: black;"> |function _utf8_encode (string) </span> <span style="color: black;"> |</span> <span style="color: black;"> |// private method for UTF-8 decoding</span> <span style="color: black;"> |function _utf8_decode(utftext) "</span><span style="color: red;">;</span>

лКодbase64encode <span style="color: red;">=</span> СтрЗаменить<span style="color: red;">(</span>лКодbase64encode<span style="color: red;">,</span><span style="color: black;">"'"</span><span style="color: red;">,</span>Символ<span style="color: red;">(</span><span style="color: black;">34</span><span style="color: red;">)</span><span style="color: red;">)</span><span style="color: red;">;</span> WSH<span style="color: red;">.</span>AddCode<span style="color: red;">(</span>лКодbase64encode<span style="color: red;">)</span><span style="color: red;">;</span>

Рез1 <span style="color: red;">=</span> WSH<span style="color: red;">.</span>Run<span style="color: red;">(</span><span style="color: black;">"encode"</span><span style="color: red;">,</span>СтрокаДанных<span style="color: red;">)</span><span style="color: red;">;</span>

<span style="color: red;">Возврат</span> Рез1<span style="color: red;">;</span>

<span style="color: red;">КонецФункции</span>

  • Скопировать ссылку
  • Перейти

<pre style="color: blue; overflow: auto;"> <span style="color: green;">// кодируем данные в base64, возможно переделать на штатные средства</span> <span style="color: red;">Функция</span> ЗакодироватьВBase64<span style="color: red;">(</span>Данные<span style="color: red;">)</span>

СтрокаДанных <span style="color: red;">=</span> Строка<span style="color: red;">(</span>Данные<span style="color: red;">)</span><span style="color: red;">;</span>

WSH <span style="color: red;">=</span> <span style="color: red;">Новый</span> COMОбъект<span style="color: red;">(</span><span style="color: black;">"MSScriptControl.ScriptControl"</span><span style="color: red;">)</span><span style="color: red;">;</span> WSH<span style="color: red;">.</span>language <span style="color: red;">=</span> <span style="color: black;">"JScript"</span><span style="color: red;">;</span>

лКодbase64encode <span style="color: red;">=</span> <span style="color: black;">"</span> <span style="color: black;"> |function encode(input) </span> <span style="color: black;"> |</span> <span style="color: black;"> |// public method for decoding</span> <span style="color: black;"> |function decode(input) </span> <span style="color: black;"> |</span> <span style="color: black;"> |// private method for UTF-8 encoding</span> <span style="color: black;"> |function _utf8_encode (string) </span> <span style="color: black;"> |</span> <span style="color: black;"> |// private method for UTF-8 decoding</span> <span style="color: black;"> |function _utf8_decode(utftext) "</span><span style="color: red;">;</span>

лКодbase64encode <span style="color: red;">=</span> СтрЗаменить<span style="color: red;">(</span>лКодbase64encode<span style="color: red;">,</span><span style="color: black;">"'"</span><span style="color: red;">,</span>Символ<span style="color: red;">(</span><span style="color: black;">34</span><span style="color: red;">)</span><span style="color: red;">)</span><span style="color: red;">;</span> WSH<span style="color: red;">.</span>AddCode<span style="color: red;">(</span>лКодbase64encode<span style="color: red;">)</span><span style="color: red;">;</span>

Рез1 <span style="color: red;">=</span> WSH<span style="color: red;">.</span>Run<span style="color: red;">(</span><span style="color: black;">"encode"</span><span style="color: red;">,</span>СтрокаДанных<span style="color: red;">)</span><span style="color: red;">;</span>

<span style="color: red;">Возврат</span> Рез1<span style="color: red;">;</span>

<span style="color: red;">КонецФункции</span>

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Пытаюсь закодировать Json следующего содержания: ключом: 123456

Должно получиться (и получается при кодировке различных онлайн кодировщиков): Dm0Oj8p9SCPeYojkxrtos2mMn9s= а вместо этого описанная выше функция вообще отказывается работать пока ключ тоже не пропустишь через "ЗакодироватьВBase64", а после этого выдает результат: zV8nNDDkrNW69zP/sdYCcucUdHU=

Подскажите пожалуйста как получить верный результат.

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Если нужна другая функция хеширования - меняем в двух строчках ХешФункция.SHA1 на нужную и все.

  • Скопировать ссылку
  • Перейти

(14) спасибо, заработало на sha256

Причем работает более чем в 10 раз быстрее нежели через COMОбъект("System.Security.Cryptography.HMACSHA256")

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Просмотры 30913

Загрузки 0

Рейтинг 16

Создание 27.05.14 13:36

Обновление 05.06.14 14:59

№ Публикации 284214

Тип файла Нет файла

Конфигурация Конфигурации 1cv8

Операционная система Windows

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Не указано

См. также

От Hello world - к защите конфигураций за 1 минуту Промо

Вы всегда хотели но боялись создать COM объект? Тогда мы идем к вам! С обычным блокнотом, где будем программировать на c#, и таймером .

19.05.2012 35890 O-Planet 130

Информационная безопасность 1С: Памятка для Обновлятора 1С

— Три магнитофона, три кинокамеры заграничных, три портсигара отечественных, куртка замшевая. три.

10.12.2020 4278 Indgo 63

Обезличивание базы средствами Конвертации данных 2

Быстро, просто, понятно обезличить нужные данные в любой базе.

14.06.2020 3648 Yashazz 21

Расшифровка DataMatrix кода с пачки сигарет (табачная продукция)

Разбор считанного DataMatrix кода с пачки сигарет - какие символы за что отвечают. Декодирование МРЦ

07.06.2020 12870 Tasselhof 10

Кодирование по алфавиту. Большие целые числа

А вы знали, что 1С умеет в очень длинные числа? Кодирование информации в строку по указанному алфавиту, возможен любой алфавит и не только. В тексте приведён алгоритм для кодирования последовательности байт в любой и из любого односимвольного алфавита.

14.05.2020 2206 mrsmrv 5

SHA512 и HMAC512 на 1С 8 без использования внешних компонент

Имплементация алгоритма расчета Hash 512 с ключом и без. С ключом по алгоритму HMAC. Используются механизмы платформы начиная с версии 8.3.11.

29.04.2020 3865 mrsmrv 21

Танцы с бубном! Создаём демонстрационную базу

В статье кратко расскажу Вам о моём опыте создания демонстрационной версии базы данных 1С и способах защиты кода.

08.02.2018 16833 user748289 41

Симметричное шифрование в 1С

Настоящая статья посвящена реализации в 1С симметричного шифрования встроенными механизмами

02.06.2015 29035 alex271 8

Защита конфигурации от .

(©Топчий Д.Ю.) Бывают моменты в жизни, когда нужно сделать возможность входа только одному пользователю после определенного времени. Ниже приведен такой код.

📎📎📎📎📎📎📎📎📎📎