0. Diversus 2015 25.02.13 10:50 Сейчас в теме

Работа с криптографией на примере получения хэша SHA-512 в 1С

Понадобилось мне как то сделать одну СМС-рассылку в 1С с методом усиленной авторизации, в которой необходимо было получить хэш SHA-512. Было перерыто половина интернета и ничего толкового именно по SHA-512 найдено так и не было...
В результате был найден способ как получить криптографическую функцию в 1С не копаясь в RFC и спецификациях относительно быстро и самое главное отлаженную от и до.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. andrewks 1268 25.02.13 16:11 Сейчас в теме
Я думаю чуть-чуть модифицировав код, можно завставить шифровать и расшифровывать данные

хэш-функция в принципе не способна шифровать и расшифровывать данные
2. Diversus 2015 25.02.13 16:17 Сейчас в теме
(1) Я знаю, что хэш-функция это необратимая функция.
Я говорю о том, что с помощью такого подхода можно заставить ее и шифровать. Заменив функцию SHA-512, на, допустим, функцию по шифрованию AES, DES, RC4 и т.д.
Мы получим превосходные данные по скорости работы.
3. andrewks 1268 25.02.13 16:25 Сейчас в теме
(2) "заставить ее и шифровать" кого - её? хэш-функцию, или 1С?

подход к исполнению в 1С скриптов js/vbs, как бы, не нов, ещё на 7.7 активно применялся.
4. Diversus 2015 25.02.13 16:27 Сейчас в теме
(3) Конечно речь идет о 1С.
И я так же знаю, что такой подход не нов. Я об этом упомянул в статье:
Конечно, я не претендую на оригинальность идеи, но, все же я думаю, кто-то найдет эту информацию полезной для себя.
5. andrewks 1268 25.02.13 16:33 Сейчас в теме
(4) право, не хочется разводить холивар, но смысл этой публикации мне не совсем понятен.

1. код вчистую взят из http://www.happycode.info/javascript-sha-512/ , однако ссылки на первоисточник кода безжалостно выдраны.
2. используется типовой, давно известный приём вызова скрипта из 1С.

пользуясь такой идеологией, можно на каждый выложенный в интернете полезный джава-скрипт оформить отдельную публикацию на Инфостарте.
6. Diversus 2015 25.02.13 17:54 Сейчас в теме
(5) Ссылку на первоисточник кода на JScript указал.
Сначала хотел уменьшить код функции, чтобы не раздувать публикацию. Хотел указать ссылку в конце, а потом благополучно забыл.
Спасибо что поправили.

Теперь про холивар и прочее.
Тут я не согласен с Вами.

Повторюсь еще раз... Я НЕ НАШЕЛ в интернете хэш-функции SHA-512 для 1С. НИГДЕ!
Решил поделиться с сообществом. Может быть кому-нибудь пригодится так же как и мне.

Что в этом плохого?
pbahushevich; mms76; CyberCerber; sasha777666; +4 Ответить
8. Гость 26.02.13 10:29
(6)

Я НЕ НАШЕЛ в интернете хэш-функции SHA-512 для 1С. НИГДЕ!


Зачем искать интернете хэш-функции SHA-512 для 1С? Все уже давно встроено в ОС, и отлично гуглится. В результате за 10 минут вполне можно сделать такое:

Текст = Новый COMОбъект("System.Text.UTF8Encoding");
КриптоSHA512 = Новый COMОбъект("System.Security.Cryptography.SHA512Managed");
Хэш = КриптоSHA512.ComputeHash_2(Текст.GetBytes_4("ололо")).Выгрузить();


На выходе массив байтов.
mystra; mms76; nihfalck; romansun; Diversus; +5 Ответить
9. Diversus 2015 26.02.13 10:40 Сейчас в теме
(8) Пять балов! Где же Вы раньше были?
Честно искал, но ничего путевого не нашел.
Ваше решение красивее. Попробовал, возвращает массив из которого уже не сложно получить строку с хэшем.

Спасибо за второе решение.
10. yukon 78 26.02.13 11:15 Сейчас в теме
(9)

Где же Вы раньше были?


Недалеко :)

Попробовал, возвращает массив из которого уже не сложно получить строку с хэшем.


Требует .Net, но на всех современных машинах он установлен, так что большой проблемой не будет.
Зайдите regedit-ом в HCR\System.Security.Cryptography.xxxxxx там много интересного по теме.
11. Diversus 2015 26.02.13 11:46 Сейчас в теме
(10) Добавил Ваш вариант в статью
22. user853472 24.12.17 01:24 Сейчас в теме
(8) А как этот массив байтов далее преобразовывать? Вот так работает но не всегда))
HTML = Новый COMОбъект("htmlfile");
    HTML.Open("text/html");
    HTML.Write("<script>TransformString = function(x,y){return x.toString(y?y:16)}</script>");
    ЯваСкрипт = HTML.documentElement.document.Script;
    
    Хеш = "";
    Для Каждого Байт Из ХешБайт Цикл
        Символ = ЯваСкрипт.TransformString(Байт);
        Хеш = Хеш + ?(СтрДлина(Символ) = 2, Символ, "0"+Символ);
    КонецЦикла;
Показать


В фоновом запуске вылетает на строке "ЯваСкрипт = HTML.documentElement.document.Script;" с ошибкой получения атрибута Script.

Очень нужно чтобы работало в фоне, в приведенном варианте от автора нет ключа, который можно указать КриптоSHA512.Key
Как сделать чтобы работало в фоновом запуске на файловой версии 1С ?
24. ogidni 151 26.06.19 11:58 Сейчас в теме
Так же есть майнер
(2)
говорю о том, что с помощью такого подхода можно заставить ее и ш

Хеш функция это основа сквозной криптографии. Действительно можно легко и шифровать и дешифровать. А если использовать механизмы Кунингуава можно и RSA расширить
7. akor77 897 26.02.13 07:22 Сейчас в теме
Спасибо, мне как новичку очень интересно. Хорошо бы было выложить подборку полезных скриптов для 1С, например получение путей к рабочему столу, других системных каталогов и т.п.
12. Антон Ширяев 470 13.03.13 12:15 Сейчас в теме
Как-то начал писать статью как нативными средствами 1С получить хеш SHA-1 (на самом деле любой хеш при программировании его алгоритма, функции XOR, Left/Right Rotate и прочие в принципе готовы), но так как совпало со сменой работы бросил и уже год как висит неопубликованной. Смотрю интерес к получению хешей все же есть. Постараюсь дописать и опубликовать статью.
13. DikSer 26.04.13 08:23 Сейчас в теме
Товарищи а как зашифровать по ключу в HMAC-SHA512?
user853472; serg1974; DISc0nNecT; +3 Ответить
21. Serginio 797 02.09.17 21:50 Сейчас в теме
23. user853472 24.12.17 01:38 Сейчас в теме
(21) Доброго времени суток! Если знаете, подскажите пожалуйста, как из

 ХешБайт = Криптография.ComputeHash_2(Текст.GetBytes_4(Запись.Значение)).Выгрузить();


получить хеш для отправки на сервер не используя

HTML = Новый COMОбъект("htmlfile");
HTML.Open("text/html");
HTML.Write("<sc ript>TransformString = function(x,y){return x.toString(y?y:16)}</sc ript>");
ЯваСкрипт = HTML.Script;
	
	Хеш = "";
	Для Каждого Байт Из ХешБайт Цикл
		Символ =  ЯваСкрипт.TransformString(Байт);
		Хеш = Хеш + ?(СтрДлина(Символ) = 2, Символ, "0"+Символ);
	КонецЦикла;
Показать


Так как при фоновом задании вылетает с ошибкой что не найден атрибут "Script"
14. IKSparrow 02.02.15 11:33 Сейчас в теме
Смотрим СП - объект "ХешированиеДанных".
Зачем изобретать велосипед?
15. Diversus 2015 02.02.15 12:22 Сейчас в теме
(14) IKSparrow, этот объект появился в 8.3 статья была создана в 2013 году, когда 8.3 еще была в зародыше и нужно это все было все на платформе 8.2.
Так что там только такие велосипеды и работали :)
16. serg1974 13.01.17 12:42 Сейчас в теме
(14) так ведь там максимум SHA-256 !
jo0506; pbahushevich; +2 Ответить
17. sapser 9 18.08.17 13:18 Сейчас в теме
Здравствуйте!
"возвращает массив из которого уже не сложно получить строку с хэшем"
Подскажите пожалуйста как получить строку с хэшем?
18. xvchk 02.09.17 21:25 Сейчас в теме
(17)

Тоже стакнулся на этой фразе

Попробуй как написано здесь
http://1с-интеграция.рф/useful_links/47/364/
25. ogidni 151 26.06.19 12:00 Сейчас в теме
Голову сломал переписывая этот код на 1С. :-(
26. MuI_I_Ika 667 21.08.19 11:42 Сейчас в теме
27. ogidni 151 21.08.19 12:53 Сейчас в теме
Результат получения открытого ключа btc из приватного?
28. MuI_I_Ika 667 26.08.19 16:33 Сейчас в теме
(27) я ожидал, что в результате переписывания кода получится рабочий код на 1с.
29. ogidni 151 27.08.19 10:55 Сейчас в теме
(28) Я тоже ожидал, что то похожее получил, но есть ньюансы.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

Программист 1С
Краснодар
зарплата от 80 000 руб. до 160 000 руб.
Полный день

Консультант 1 С
Краснодар
зарплата от 50 000 руб. до 150 000 руб.
Полный день

Консультант-методолог 1С
Краснодар
зарплата от 110 000 руб.
Полный день