Имя: Пароль:
1C
1С v8
SHA256 для 8.3.3
0 Avily
 
23.12.13
11:36
Добрый день, подскажите пожалуйста.
Мне нужно зашифровать строку функцией SHA256. Нашла информацию, что в 8.3.3 это реализовано, но нигде нет примера кода. Помогите пожалуйста, как это написать?
1 Леха Дум
 
23.12.13
11:41
Без фотки тема не взлетит!
2 Avily
 
23.12.13
11:43
Поставила уже... :-)
3 oleg_km
 
23.12.13
11:45
В синтаксис-помощнике почитай ХешированиеДанных. Если будет непонятно - пиши.
4 Avily
 
23.12.13
11:46
не понятно, прочитала
5 Avily
 
23.12.13
11:47
ХешДанных=Новый ХешированиеДанных(SHA256(SHA256))
а дальше как?
6 oleg_km
 
23.12.13
11:47
Что именно не понятно?
7 Avily
 
23.12.13
11:48
в какой момент передавать строку, которую я хочу хешировать
8 Avily
 
23.12.13
11:48
мб
ХешДанных.Добавить(СтрокаДляХеширования);
9 Avily
 
23.12.13
11:50
мне бы просто пример кода с хешированием... а дальше я сама разберусь, ни разу не сталкивалась
10 oleg_km
 
23.12.13
11:52
Давайте по порядку. Зачем вам нужен хеш: вы его сами будете проверять или его будет проверять другое приложение? Просто от этого будет зависеть, подходит ли функция ХешДанных.Добавить(СтрокаДляХеширования);
11 Avily
 
23.12.13
11:56
мне нужно передать данные на сайт через WS-ссылку, там есть функция:
Функция(Данные,Ключ)
Данные - это строка (json) - ее я формирую программно
Ключ - это то, что я должна получить при прогоне строки Данные через SHA256
Вот ключ мне и нужно получить
12 Avily
 
23.12.13
11:56
сайт будет обрабатывать эти Данные и сравнивать такой же у него получился Ключ или нет
13 Avily
 
23.12.13
11:58
у меня и на эту строку ругается:
ХешДанных=Новый ХешированиеДанных(SHA256(SHA256))
не знаю как правильно указать тип функции в параметре
14 Avily
 
23.12.13
11:59
с этим разобралась:
Х
ешДанных=Новый ХешированиеДанных(ХешФункция.SHA256) ;
15 Serginio1
 
23.12.13
12:00
Хэш=Новый ХешированиеДанных(ХешФункция.SHA256);
        Хэш.Добавить("Тра ля ля");
        Сообщить(Хэш.ХешСумма);
16 Serginio1
 
23.12.13
12:01
ХешСумма (HashSum)
Использование:

Только чтение.
Описание:

Тип: Число; ДвоичныеДанные.
Содержит текущее значение хеш-суммы. Для функций MD5, SHA1 и SHA256 – значение типа ДвоичныеДанные, для функции CRC32 – Число.
17 oleg_km
 
23.12.13
12:02
(15) Проблема может быть в кодировке. Добавить воспринимает кодировку UTF8, а сайт? И в каком виде сайт ждет значение хеша?
18 Avily
 
23.12.13
12:04
строку ждет
19 Avily
 
23.12.13
12:04
а я двоичные данные получила, можно как то перевести?
20 oleg_km
 
23.12.13
12:13
Вроде как Строка(ДвоичныеДанные) сейчас как раз переводит байты в шестнадцатеричное представление. Только тебе наверное пробелы нужно выкинуть. В каком виде сайт ждет хеш, пример можешь кинуть?
21 Avily
 
23.12.13
12:14
94f6f771181eada99eecaa22228e5f261501b5a4466cec860dc0ffcb906b21c5
22 Avily
 
23.12.13
12:16
сделала Строка(ДвоичныеДанные) , он мне в точности такуюже строку получил как двоичные данные были
23 oleg_km
 
23.12.13
12:19
Полный свой код приведи
24 Avily
 
23.12.13
12:19
Функция ПолучитьКлючШифрования(Шифр)
    Хэш=Новый ХешированиеДанных(ХешФункция.SHA256);
    Хэш.Добавить(Шифр);
    Возврат Хэш.ХешСумма;
КонецФункции
25 Avily
 
23.12.13
12:20
получаю 61 91 C7 36 3B D5 AB 88 08 BC 04 67 76 39 F2 B3 76 17 4D 23 FC 25 59 A1 7D 36 D4 0A 15 66 6B FF
26 Avily
 
23.12.13
12:20
а мне надо что-то типо 94f6f771181eada99eecaa22228e5f261501b5a4466cec860dc0ffcb906b21c5
27 Serginio1
 
23.12.13
12:22
Base64Строка или XmlСтрока
28 Avily
 
23.12.13
12:24
пробовала, они одно и то же возвращают и мне не подходит
29 oleg_km
 
23.12.13
12:26
Функция ПолучитьКлючШифрования(Шифр)
    Хэш=Новый ХешированиеДанных(ХешФункция.SHA256);
    Хэш.Добавить(Шифр);
    Возврат Хэш.ХешСумма;
КонецФункции

Функция Добавить воспринимает Шифр как набор байтов в кодировке UTF8, а сайт возможно считает, что строка Шифр должна быть в другой кодировке, например в ANSI. Нужно узнать, в какой кодировке разработчики сайта хешат строку Шифр.
30 Serginio1
 
23.12.13
12:27
Или
ТипДвоичныеДанные    = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "base64Binary");
    ДвоичныеДанные      = ФабрикаXDTO.Создать(ТипДвоичныеДанные,Хэш.ХешСумма);
    
    Возврат ДвоичныеДанные;
31 Serginio1
 
23.12.13
12:28
Или СериализаторXDTO.ЗаписатьXDTO(Хэш.ХешСумма)
32 Serginio1
 
23.12.13
12:30
Какой тип требует сайт? Что именно не подходит?
33 Avily
 
23.12.13
12:32
а как сделать, что бы он в ANSI воспринимал?
34 Avily
 
23.12.13
12:33
UTF8
35 Avily
 
23.12.13
12:34
уточнила, не нужно мне ANSI, все в UTF8
36 oleg_km
 
23.12.13
12:34
(33) Ты все таки попробуй выяснить, в какой кодировке считают хеш на сайте.
ЗаписьТекста указываешь нужную кодировку, тогда нужно использовать функцию ДобавитьФайл
37 Avily
 
23.12.13
12:36
я выяснила - UTF8
38 oleg_km
 
23.12.13
12:38
(35) Тогда странно. Но нужно не забывать, что хеш функция очень чувствительна к малейшим изменениям. Я например долго мучился с банк-клиентом, потому что они проверяли ЭЦП от строки с ВК+ПС в конце, а я их удалял. Может у тебя декорируется строка? Кинь сюда строку
39 Avily
 
23.12.13
12:41
94f6f771181eada99eecaa11118e5f261501b5a3311cec860dc0ffcb906b21c5cf5ffe752e93c87ea93b5a78d9088de9
40 Avily
 
23.12.13
12:42
сейчас пришлю что должно получиться
41 Avily
 
23.12.13
12:45
6191c7363bd5ab8808bc04677639f2b376174d23fc2559a17d36d40a15666bff
42 Avily
 
23.12.13
12:46
сейчас я получаю: 61 91 C7 36 3B D5 AB 88 08 BC 04 67 76 39 F2 B3 76 17 4D 23 FC 25 59 A1 7D 36 D4 0A 15 66 6B FF
43 acsent
 
23.12.13
12:48
пробелы убрать нужно?
44 Avily
 
23.12.13
12:49
ой блин точно, спасибо большое
45 Avily
 
23.12.13
12:49
смотрю на строчки и в упор не вижу что они одинаковые((
46 Avily
 
23.12.13
12:50
пора уже на новогодние праздники!!
47 Avily
 
23.12.13
12:50
Всех с наступающим!!!
48 Serginio1
 
23.12.13
12:56
(42)
ТипhexBinary    = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "hexBinary");

    ДвоичныеДанные      = ФабрикаXDTO.Создать(ТипhexBinary,Хэш.ХешСумма);
      Сообщить(ДвоичныеДанные.ЛексическоеЗначение);
49 oleg_km
 
23.12.13
13:09
Такой вариант должен работать:

Функция ПолучитьКлючШифрования(Шифр)
    Хэш=Новый ХешированиеДанных(ХешФункция.SHA256);
    Хэш.Добавить(Шифр);
    Возврат НРег(СтрЗаменить(Строка(Хэш.ХешСумма), " ", ""));
КонецФункции

Или как (48)