Имя: Пароль:
1C
1С v8
MD5 в 8ке...
,
0 ДенисЧ
 
27.08.13
14:43
Требуется считать MD5 от файла (!), в том числе и бинарные...
Нашёл один варинат,но он работает через CAPICOM, соответственно на стороне сервера не запустится (ибо уже не поддерживается и не стоит там)

Нашёл ещё v8: Быстрое вычисление хэша файла без прав админа - через powershell, но там вообчОрт знает что...

Ещё какие-нибудь варианты есть?
1 ДенисЧ
 
27.08.13
14:44
Да, в БСП тоже есть функция... Но она работает от строки...
2 Maxus43
 
27.08.13
14:46
что значит "считать MD5 от файла"? получение мд5 есть процесс шифрования, тебе надо весь файл пропустить через этот алгоритм... не?
3 Jump
 
27.08.13
14:53
(0)http://www.pc-tools.net/win32/md5sums/
Можно конечно и на 1с реализовать, вопрос лишь в скорости работы.
4 ДенисЧ
 
27.08.13
14:53
(2) Да. Мне нужен уникальный хеш от любого файла, чтобы на другой стороне верифицировать передачу.
5 ДенисЧ
 
27.08.13
14:54
(3) И что, она будет работать на сервере в режиме фонового задания?
6 Maxus43
 
27.08.13
14:54
(4) для этого CRC есть, нафига МД5? ты представляешь сколько будет файл колбасить?
7 Asmody
 
27.08.13
14:54
возьми отсюда http://gnuwin32.sourceforge.net/packages/coreutils.htm и запускай в командной строке
8 Jump
 
27.08.13
14:54
(5)А в чем собственно проблема?
9 Asmody
 
27.08.13
14:55
(6) если файлы небольшие, то недолго
10 ДенисЧ
 
27.08.13
14:56
(6) Представляю. Те методы, что есть у меня - на требуемых объёмах работают достаточно быстро.
(8) просто не уверен. Попробую.
11 Maxus43
 
27.08.13
14:56
(9) это да, но CRC для этих целей имхо правильней, там алгоритм легче намного
12 ДенисЧ
 
27.08.13
15:46
(8) Чего я и боялся...

    md5       = ПолучитьОбщийМакет("MD5Sums");
    времКат   = КаталогВременныхФайлов();
    md5.Записать(времКат + "\md5sums.exe");
    имяФайла  = ПолучитьИмяВременногоФайла();
    ддФайл.Записать(имяФайла);
    
    имяВывода = ПолучитьИмяВременногоФайла();
    
    стр = "md5sums.exe -u -e """ + имяФайла + """ > """ + имяВывода + """";
    ЗапуститьПриложение(стр, времКат, Ложь);

На последней строчке зависает. Наглухо.
13 Maxus43
 
27.08.13
15:50
может так запустить?

sh = Новый COMОбъект("WScript.Shell");
sh.Exec("cmd /c Z: && cd \ && start Z:\file.bat");

через WScript.Shell
14 Smallrat
 
27.08.13
16:02
я недавно тоже такой проблемой заморочился

остановился на внешней длл XMD5
http://rghost.ru/48403896


Функция МД5_ДЛЛ(Файл)
  crypt = Новый COMОбъект("XStandard.MD5");
  Value = crypt.GetCheckSumFromFile(Файл);
  Возврат Value;
КонецФункции
15 Smallrat
 
27.08.13
16:10
+(14) также может считать md5 строки: GetCheckSumFromString(sString As String) As String
16 ДенисЧ
 
27.08.13
16:13
(14) Это ActiveX...
17 ДенисЧ
 
27.08.13
16:20
Вроде заработала... Спасибо.
18 Smallrat
 
27.08.13
16:20
(16) ну если без него, то тяжело - есть пару обработок на 1С, которые считают md5 строки (одна из 1С, другая сторонняя) - я пробовал приспособить код для файлов, что-то у меня не получилось. капиком - вообще что-то древнее, два часа с ним корячился - так и не взлетел. вариант только 1 - возится с этим MD5sums или другой похожей прогой.
19 ДенисЧ
 
27.08.13
16:22
(18) НУ пока заработала, так и оставим пока.
20 Odavid
 
30.08.13
11:39
(0)>>через powershell, но там вообчОрт знает что
- самые нормальные способы там описаны. Через PowerShell на WScript - весьма интересный способ без использования ВК только средствами винды. А не "чОрт знает что..." )))
21 vde69
 
модератор
30.08.13
11:43
http://code.google.com/p/restoration-base-1c8/downloads/detail?name=Bin1CD_VK_DistrNative_1_1_7.rar&can=2&q=

там есть расчет CRC, причем быстрый и реально работает на сервере, правда если говоришь про CRC - то там алгоритм адлер-32, почитай про совместимость его с другими CRC

там исходники есть можешь перекомпилить под себя :)
22 ДенисЧ
 
30.08.13
11:44
(21) Я не говорю про CRC :-) Я говорю про то, что написано в сабже.
23 vde69
 
модератор
30.08.13
11:46
(22) в 8.3 вроде реализовано на уровне платформы
24 ДенисЧ
 
30.08.13
11:46
(23) У меня не 8,3.
25 Odavid
 
30.08.13
14:27
Вот это интересно:
>>vde69
6 - 06.12.12 - 19:54    (4)CAPICOM - больше не поддерживается"
- а что там может поменяться?
26 Ковычки
 
30.08.13
15:49
echo off && ( certutil -hashfile certutil.txt MD5 2> nul || certutil -hashfile certutil.txt 2> nul ) | findstr /r "[0-9a-f][0-9a-f].[0-9a-f][0-9a-f] SHA MD5"
27 Torquader
 
30.08.13
21:32
Вообще-то, передачу файлов, расчёт Md5 и прочего нужно вынести из 1С в отдельное приложение - которое будет получать файл-задание и выполнять его, а в файл результата записывать результат выполнения - то есть или файл доставлен или не вышло.