|
ХешированиеДанных в 1с8 для обмена ссайтом | ☑ | ||
---|---|---|---|---|
0
e053nk
06.06.17
✎
11:50
|
Не получается корректный получить ответ от функции
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); //Новый ХешированиеДанных(); //Base64Значение ХешированиеДанных.Добавить("superkey"); ХешированиеДанных.Добавить("/auth/token/merchants"); ХешДанных=ХешированиеДанных.ХешСумма ; ХешДанных.Записать("D:\Текстовый файл.txt"); хш= НРег(СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", "")); //62e37f6dc60083ba969f06ec2276a8682bec227b должно быть //72 D8 85 FD 4B 28 50 DE EF C6 25 E2 47 0E BA 85 E2 99 64 AB возвращает //72d885fd4b2850deefc625e2470eba85e29964ab -строка В интернете нашел пару старых тем с такой же проблемой-только там либо решения до конца не приводятся . либоу меня ихметоды не срабатывают. В в он лай сервисе получаю строку 62e37f6dc60083ba969f06ec2276a8682bec227b мой код возвращает 72d885fd4b2850deefc625e2470eba85e29964ab Чт оне так? |
|||
1
Гипервизор
06.06.17
✎
12:16
|
Что за онлайн-сервис? Проверил на нескольких - результат идентичен 1С.
|
|||
2
e053nk
06.06.17
✎
12:35
|
Вчера открывал сайт-сейчас найти не могу. Иностранный какой то -2 поля строка и ключ -и реально выдавал 62e37f6dc60083ba969f06ec2276a8682bec227b .
И в примере на сайте также значение 62e37f6dc60083ba969f06ec2276a8682bec227b формируется. |
|||
3
e053nk
06.06.17
✎
12:36
|
||||
4
Гипервизор
06.06.17
✎
12:43
|
Ну и что за ключ туда передавать? В 1С вы кажется секретный ключ не передаете и удивляетесь другому результату?
Ну раз уж не устраивает: http://www.sha1-online.com/ то может устроит по вашей же ссылке рядом: https://www.freeformatter.com/message-digest.html |
|||
5
Serginio1
06.06.17
✎
12:54
|
Возможно тебе нужен HMAC
Шифрование алгоритмом SHA1 |
|||
6
e053nk
06.06.17
✎
13:19
|
(5) Т.е. функции формирования хэш по ключу в 1с 8 стандартной нет? Только внешние библиотеки?
|
|||
7
Лефмихалыч
06.06.17
✎
13:40
|
(6) есть, просто ты в эту функцию передаешь не то, что надо. Соответственно, получаешь не то, что хочешь
|
|||
8
e053nk
06.06.17
✎
15:09
|
(7) Хорошо,что и куда нужно передать в моём случае,чтобы получить ответ=62e37f6dc60083ba969f06ec2276a8682bec227b ?
|
|||
9
e053nk
07.06.17
✎
07:35
|
Подниму тему
(5) да наверное это и нужно, только по ссылке не понял до конца, что это за компонента. Нашел на просторах интернета статью "HMAC на встроенном языке 1С" , в ней вроде как все расписано, единственно на вход функции HMAC(Знач K, Знач text, Знач Hash) нужно посылать значение К(ключа) в шестнадцатеричном виде. Нашел функцию перевода строки в шестнадцатеричном код: Функция Str2Hex(ТекстСообщения, ТипКодировки) СтрокаЗнаков = ""; Если ТипКодировки = 1 Тогда ДлинаКодаСимвола = 4; Иначе ДлинаКодаСимвола = 2; КонецЕсли; Для К = 1 По СтрДлина(ТекстСообщения) Цикл // СтрокаЗнаков = СтрокаЗнаков + Padl(DecToHex(КодСимвола(Сред(ТекстСообщения, К, 1))), ДлинаКодаСимвола, "0"); СтрокаЗнаков = СтрокаЗнаков + Прав("0000"+DecToHex(КодСимвола(Сред(ТекстСообщения, К, 1))), ДлинаКодаСимвола);//, "0"); КонецЦикла; Возврат СтрокаЗнаков; КонецФункции // Str2Hex() И все равно на выходе не получается не тот ответ: HMAC(Str2Hex("superkey", 1),"/auth/token/merchants","SHA1")=dfc093c5d9ef1485e56143632be81918314ea9ba HMAC(Str2Hex("superkey", 0),"/auth/token/merchants","SHA1")=5f1542f3e001cc23bc1c4e62db7c23ae40f37430 Дальше что то не пойму куда копать- вроде все данные правильно указываю- на выходе все равно не неправильный ответ. Может у кого то еще идеи есть? |
|||
10
Гипервизор
07.06.17
✎
07:43
|
Посмотри вот это http://catalog.mista.ru/public/284214/
|
|||
11
Serginio1
07.06.17
✎
12:12
|
||||
12
Serginio1
07.06.17
✎
12:37
|
||||
13
Serginio1
07.06.17
✎
13:13
|
Можешь проверить генерацию здесь
http://billatnapier.com/security01.aspx |
|||
14
e053nk
07.06.17
✎
15:47
|
(10) Взял алгоритм по ссылке.Не получается получить строку нужную. Вроде все подставил -возвращает другое содержимое.
Процедура ПробаХеш() Ключ="superkey"; СтрокаШифр="/auth/token/merchants" ; ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, СтрокаШифр); СтрJSON = ЗаписьJSON.Закрыть(); ЗначениеХэш=ХэшированиеШтатныеСредства(СтрJSON, Ключ); конецпроцедуры //Функция ХэшированиеШтатныеСредства(СтрокаJSON, Base64JSON ,КлючХешированияДанных = "") // //Описание: // Реализует инкрементальный расчет хеш-суммы по добавленным данным, использую хеш функцию SHA1. // //Параметры: // СтрокаJSON - Строка. Строка в формате JSON. // // КлючХешированияДанных - Строка. Закодированные данные идентификатора в base64. // // Возвращаемое значение: // Строка. Закодированная хеш сумма в base64. // Функция ХэшированиеШтатныеСредства(СтрокаJSON, КлючХешированияДанных = "") Base64JSON = ЗакодироватьВBase64(СтрокаJSON); Base64JSONКлюч = ЗакодироватьВBase64(КлючХешированияДанных);//эту строку добавил-иначе дальше ошибку выдавал ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); ХешированиеДанных.Добавить(base64Значение(Base64JSONКлюч)); ХешированиеДанных.Добавить(base64Значение(Base64JSON)); ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "base64Binary"); ДвоичныеДанные = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ХешированиеДанных.ХешСумма); Возврат ДвоичныеДанные.ЛексическоеЗначение; КонецФункции Функция ЗакодироватьВBase64(СтрокаДанных) ИмяФайлаЗаписьТекст = ПолучитьИмяВременногоФайла(); ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаЗаписьТекст); ЗаписьТекста.ЗаписатьСтроку(СтрокаДанных); ЗаписьТекста.Закрыть(); ДвДанны = Новый ДвоичныеДанные(ИмяФайлаЗаписьТекст); Возврат base64Строка(ДвДанны); КонецФункции Выдает в итоге: ДвоичныеДанные.ЛексическоеЗначение="zs2w+UmCpQw1SaliGyyYOWQn4bo=" ДвоичныеДанные.Значение=CE CD B0 F9 49 82 A5 0C 35 49 A9 62 1B 2C 98 39 64 27 E1 BA В чем еще проблема может быть? |
|||
15
e053nk
08.06.17
✎
12:01
|
Описанные выше действия,которые я произвел,не привели к получению нужного результата. Сейчас работает только такой код:
Функция ЗашифроватьSHA1(Строка, СекретныйКлюч) Экспорт Текст = Новый COMОбъект("System.Text.UTF8Encoding"); Криптография = Новый COMОбъект("System.Security.Cryptography.HMACSHA1"); Криптография.Key = Текст.GetBytes_4(СекретныйКлюч); ХешБайт = Криптография.ComputeHash_2(Текст.GetBytes_4(Строка)).Выгрузить(); //HTML = Новый COMОбъект("htmlfile"); //HTML.Open("text/html"); //HTML.Write("<script>ПреобразоватьСтроку = function(x,y){return x.toString(y?y:16)}</script>"); //ЯваСкрипт = HTML.documentElement.document.Script; Хеш = ""; Для Каждого Байт Из ХешБайт Цикл //Символ = ЯваСкрипт.ПреобразоватьСтроку(Байт); Символ =DecToHex1(Байт); Хеш = Хеш + ?(СтрДлина(Символ) = 2, Символ, "0"+Символ); КонецЦикла; Возврат Хеш; КонецФункции Возвращает необходимое тестовое значение. Функция не моя, нашел в старой теме на форуме. Почему не заработала функция Функция HMAC(Знач K, Знач text, Знач Hash),из статьи "HMAC на встроенном языке 1С" -я так и не понял.Хотя там только язык 1с используется -и она была бы предпочтительнее. Всем откликнувшимся -большое спасибо, без ваших ссылок я вообще ничего не сделал бы/не нашел. |
|||
16
Serginio1
08.06.17
✎
14:49
|
(15) Это по сути тоже самое, что и в Шифрование алгоритмом SHA1
Только обертка над классами .Net уже внутри OC. Скорее всего для Visual Basic При этом из-за отсутствия перегрузки методов в COM приходится добавлять цифры GetBytes_4 ComputeHash_2 |
|||
17
e053nk
08.06.17
✎
16:45
|
(16) Так там тоже внешние компоненты используются, не 1с. А в "HMAC на встроенном языке 1С" только 1с, "родной и пушистый".
Огорчает, что не могу понять, что нет так делаю -у других людей эти функции ,наверно, работают нормально. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |