Имя: Пароль:
1C
1С v8
почему ПорядокБайтов для ДД не имеет значения?
0 DES
 
25.03.23
13:47
Записываю двоичные данные (20 байт) в файл при разных значениях ПорядокБайтов
    
ПотокКонечный = ФайловыеПотоки.ОткрытьДляЗаписи(ПолноеИмяФайла+"_B");    
    ЗаписьДанных = Новый ЗаписьДанных(ПотокКонечный,,ПорядокБайтов.BigEndian);
    ЗаписьДанных.Записать(ДД);
    ЗаписьДанных.Закрыть();
    ПотокКонечный.Закрыть();

ПотокКонечный = ФайловыеПотоки.ОткрытьДляЗаписи(ПолноеИмяФайла+"_L");    
    ЗаписьДанных = Новый ЗаписьДанных(ПотокКонечный,,ПорядокБайтов.LittleEndian);
    ЗаписьДанных.Записать(ДД);
    ЗаписьДанных.Закрыть();
    ПотокКонечный.Закрыть();

результат смотрю notepad++ с плагином HEX
никакой разницы в файлах.
Это так должно быть ?
1 Aleksey
 
25.03.23
13:52
может у тебя однобитовые знаяения и для них порядок байтов не играет роли
2 Кирпич
 
25.03.23
15:48
порядок байтов имеет смысл, когда записываешь в поток числа из нескольких байт. например, int32 - это 4 байта. вот эти 4 байта и будут перестанавливаться.
3 DES
 
25.03.23
16:28
как записывается хеш SHA-1 (20 байт) на NIX-сах ?
Потому что какая то какая то ерунда получается выходной код на никсах и на винде вроде по разному сохраняется в файл
4 DES
 
25.03.23
16:38
есть фича которая преобразует 20 байт (5 слов по 4 байта) из big-endian в little ?
5 Aleksey
 
25.03.23
17:00
(3) за порядок же BOM отвечает или он одинаковый и там и там?
6 DES
 
25.03.23
17:11
(5) без бома
7 Aleksey
 
25.03.23
17:12
(6) юникод и без бома? или это utf-8 кге априори все однобайтовое?
8 DES
 
25.03.23
17:32
функция на вебсервере вычисляет SHA1  и пишет в файл на клиенте.
наверно сервер на никсах
потому что делаю тоже самое на 1с8 но файл получается другой
9 Garykom
 
гуру
25.03.23
17:41
(8) вероятно у тебя "на 1с8" на вход функции другое подается

проверь кодировку входящих и учти бом если утф8
10 DES
 
25.03.23
17:47
(9)файл от SHA1 20 байт - бом не влазит

другая инфа на входе - маловероятно . Это канонизированный XML c того же сервера же.
11 Garykom
 
гуру
25.03.23
17:49
(10) вот этот твой xml ты и сервер по разному читаете перед тем как считать хеш
12 DES
 
25.03.23
17:51
Перепробовал  все типы канонизации - результат не различается.
написал на c# - результат такой же как и 1с8
но все не равно серверному.
серверный BE 8F 8D 91 D9 22 AB 0D 3C B4 E2 18 2A AC 04 34 AD 61 3A FA
1ц - шный AA A2 58 90 03 7B 24 86 6B FA 52 10 0E 92 95 32 70 7A AD 08
13 Garykom
 
гуру
25.03.23
17:54
(12) откуда ты знаешь что и как "функция на вебсервере вычисляет SHA1  и пишет в файл на клиенте." ?
14 DES
 
25.03.23
18:27
(13) ну из практики же
Есть файл, есть алгоритм, есть пример на C# (как бы на сервере так)
15 Garykom
 
гуру
25.03.23
18:39
(14) а подумать?
16 Chai Nic
 
25.03.23
19:41
(12) Символ конца строки в одном случае включается в хэш, в другом не включается?
17 DES
 
25.03.23
20:10
(15) в точку.
но в какую.
18 DES
 
25.03.23
20:17
(16) Нет. Канонизатор режет все что после последнего ">"
19 Chai Nic
 
25.03.23
20:22
(18) А как там с переносами строк? Юникс или виндовс?
20 vbus
 
25.03.23
21:32
для примера, файл hello word, (hw.txt) создан в Windows notepad++

Windows:
certutil -hashfile hw.txt sha1
Хэш SHA1 hw.txt:
2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
CertUtil: -hashfile — команда успешно выполнена.

Debian 4.19.194-3:
sha1sum hw.txt
2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  hw.txt
21 vbus
 
25.03.23
21:40
echo "hello world">hwd.txt

sha1sum hwd.txt
22596363b3de40b06f981fb85d82312e8c0ed511  hwd.txt

file hwd.txt
hwd.txt: ASCII text

file hw.txt
hw.txt: ASCII text, with no line terminators
22 DES
 
25.03.23
22:40
(21) Я так понимаю что hash SHA1 - он и в Африке SHA1
Проблема (наверно) в записи в файл, но и это не точно.
Прога на серверная, создает хэш пишет в файл, и потом же саа это проверяет. Так что ей без разницы как записано в файл, если она его по одному закону пишет и читает. А вот Клиентской программе как создать файл чтоб сервер скушал...
23 DES
 
25.03.23
22:45
(19) по правилам канонизации
а еще данные это одна строка, без ВК или ПС
24 ДедМорроз
 
25.03.23
23:34
Во-первых,файл должен быть без ByteOrderMark.
Во-вторых,кодировка должна быть utf-8.
В третьих,убрать символы завершения файла,если они есть (код 26).
И не забыть,что перевод строки должен быть два символа 13 и 10.
При передаче по http именно такие переводы строки в текстовых файлах получаются.
25 Garykom
 
гуру
26.03.23
01:06
я правильно понимаю что пытаешься для маркировки отправить?
26 DES
 
26.03.23
13:50
(25) ну типа того
XML канонизируется на сервере, вычисляется SHA1 (20 байт) , пишется в файл на клиенте.
Клиент подписывает хэш - получается файл формата XML. Сервер забирает файл подписи и соеденяет с исходным файлом данных. Потом все хранится в базе серверав виде одного документа.
Это точно.
Дальше наверно так:
При проверке достоверности этого документа отделяется часть подписи , проверяется её достоверность (кидается на клиента - клиент проверяется ,отвечает true/false),
Хэш вычисляется из документа и сравнивается с хэш из подписи, если они равны то Ок.
27 DES
 
26.03.23
13:53
т.е.хэш видно, каким он должен быть.
28 H A D G E H O G s
 
26.03.23
13:55
(26) Дичь какая-то. Зачем все так сложно и непонятно. Чего добиться то пытаетесь?
29 Garykom
 
гуру
26.03.23
14:06
(26) хехе
было такое когда для МДЛП делал
оказалось там надо xml правильно делать
т.е. там путаница с кодировками была и XML надо уже канонизированный отправлять
т.е. какой отправил, такой и хешить/подписывать надо
30 DES
 
26.03.23
16:48
(29) я же говорю - канонизирую и хэш считаю.
(28) что непонятно? достоверность электронного документа хранящегося на сервере гарантируется ЭЦП клиента.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший