Имя: Пароль:
1C
1С v8
ХешированиеДанных в 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с, "родной и пушистый".
Огорчает, что не могу понять, что нет так делаю -у других людей  эти функции ,наверно, работают нормально.
AdBlock убивает бесплатный контент. 1Сергей