Хеширование данных с ключом по алгоритму 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
Защита конфигурации от .
(©Топчий Д.Ю.) Бывают моменты в жизни, когда нужно сделать возможность входа только одному пользователю после определенного времени. Ниже приведен такой код.