MD5 Hash файла

04.10.12

Разработка - Защита ПО и шифрование

Получение md5 хэша для файла

Бывают случаи, когда необходимо получать какой-либо хэш для файла. В состав операционной системы входит библиотека криптографии capicom.dll, используя которую можно получить интересующий нас хэш. Привожу код для 7.7, его без труда можно перевести на 8.х

 

 

Функция  МД5(файл)
   
ScrCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
   
ScrCtrl.Language = "vbscript";
   
ScrCtrl.AddCode("
    |Function Hash()
    |Dim crypt: Set crypt = CreateObject(""CAPICOM.HashedData"")
    |crypt.Algorithm = 3
    |Dim stream: Set stream = CreateObject(""ADODB.Stream"")
    |stream.Type = 1 ' adTypeBinary
    |stream.Open
    |stream.LoadFromFile("""
+файл+""")
    |Do Until stream.EOS : crypt.Hash stream.Read() : Loop
    |Hash = crypt.Value
    |End Function
    |"
);
   
рез = ScrCtrl.Run("Hash");
    Возврат
рез;
КонецФункции

Кроме того, указав в этой функции другой алгоритм можно получить хэш SHA1, MD2, MD4, SHA-256, SHA-384 и SHA-512.

Подробнее http://msdn.microsoft.com/en-us/library/aa382443(VS.85).aspx

UPD: код для 1с8, любезно предоставленный в комментариях Mikelana

Функция  МД5(файл) 
    
    crypt = Новый COMОбъект("CAPICOM.HashedData");
    crypt.Algorithm = 3;    

    stream = Новый COMОбъект("ADODB.Stream");
    stream.Type = 1;
    stream.Open();
    stream.LoadFromFile(файл);
    Пока НЕ stream.EOS Цикл
        crypt.Hash(stream.Read());
    КонецЦикла; 

    Возврат crypt.Value;
    
КонецФункции

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20246    dimanich70    81    

145

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4100    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    18210    atdonya    24    

57

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5511    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14779    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3594    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18500    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2709 11.03.11 08:04 Сейчас в теме
Кто бы научил еще контрольную сумму считать... :|
2. d0dger 84 11.03.11 09:46 Сейчас в теме
Когда-то мучал CRC32 по таблице, добился только того что считает, но не всегда корректно - видимо не работает для бинарных файлов, подниму архив, вдруг удастся побороть...
3. cool.vlad4 2 11.03.11 10:00 Сейчас в теме
http://www.forum.script-coding.com/viewtopic.php?id=5565

DynamicWrapper выходных чисел не понимает, лучше используй DynamicWrapperX
Код:
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register "ImageHlp.DLL", "MapFileAndCheckSum", "i=sUU", "r=u"

sHeader = 0
sCalcd = 0

ress = Wrap.MapFileAndCheckSum("c:\readme.txt", sHeader, sCalcd)

WScript.Echo sCalcd & " " & sHeader & " " & ress
4. Арчибальд 2709 11.03.11 12:04 Сейчас в теме
(3) А что все про CRC32? Мне CRC8 надо.
5. d0dger 84 11.03.11 12:05 Сейчас в теме
cool.vlad4,спасибо, попробовал, думал crc32, оказалось нет. Вдруг кому пригодиться код:
Функция ПолучитьCheckSum(Путь)
    ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "VBScript";
    ScrptCtrl.AddCode("Function CheckSum
    |Set Wrap = CreateObject(""DynamicWrapperX"")
    |Wrap.Register ""ImageHlp.DLL"", ""MapFileAndCheckSum"", ""i=sUU"", ""r=u""
    |sHeader = 0
    |sCalcd = 0
    |ress = Wrap.MapFileAndCheckSum(""" + Путь + """, sHeader, sCalcd)
    |CheckSum = sCalcd
    |End Function");
    рез = ScrptCtrl.Run("CheckSum");
    Возврат рез;
КонецФункции
Показать
6. cool.vlad4 2 11.03.11 12:08 Сейчас в теме
(5) Не за, что , я наверное ссылкой вас с толку сбил, просто код взят из той ссылки (я уже не помню правда где)
библиотека msdn http://msdn.microsoft.com/en-us/library/ms680355(VS.85).aspx всегда поможет
ЗЫ враппер кстати в 1С тоже можно использовать, некогда просто было код на 1с-ке писать
7. d0dger 84 11.03.11 12:16 Сейчас в теме
(6) можно, но там проблемы с передачей параметров sHeader и sCalcd возникли. По крайней мере у меня...
8. pupkinSana 113 11.03.11 13:38 Сейчас в теме
уж проще формекс: сервис.ПолучитьХэшМД5(<?>,)
9. cool.vlad4 2 11.03.11 13:48 Сейчас в теме
(8) Где ты видел формекс под 8.1 и уж тем более под 8.2
11. Mikelana 25.08.11 15:36 Сейчас в теме
Вот для 8.* без ScriptControl


Функция  МД5(файл) 
	
	crypt = Новый COMОбъект("CAPICOM.HashedData");
	crypt.Algorithm = 3;	
	stream = Новый COMОбъект("ADODB.Stream");
	stream.Type = 1;
	stream.Open();
	stream.LoadFromFile(файл);
	Пока НЕ stream.EOS Цикл
		crypt.Hash(stream.Read());
	КонецЦикла; 

	Возврат crypt.Value;
	
КонецФункции
Показать
12. yoyoman 24.04.12 20:45 Сейчас в теме
Кириллицу как-то не корректно хеширует :(
А как можно подобным способом строку захешировать в md5?
13. d0dger 84 24.04.12 21:54 Сейчас в теме
(12) yoyoman, а какая кодировка кириллицы?
Можно написать
stream.charset = "windows-1251";
или
stream.charset = "UTF-8"

А чтобы закодировать строку можно попробовать нечто такое:
...
stream.Open();
stream.WriteText(Строка);
...
14. yoyoman 25.04.12 04:36 Сейчас в теме
(13) я себе такую функцию сделал для получения хеша строки (не файла):

Функция Hash(Значение,Алгоритм) 
	ВременныйФайл = ПолучитьИмяВременногоФайла("txt");
	Файл = Новый ТекстовыйДокумент;	
	Файл.УстановитьТекст(Значение);
	Файл.Записать(ВременныйФайл,"Windows-1251");
	ВК_Capicom = Новый COMОбъект("CAPICOM.HashedData");
	Если Алгоритм="sha1" тогда
		ВК_Capicom.Algorithm = 0;
	ИначеЕсли Алгоритм = "md5" тогда
		ВК_Capicom.Algorithm = 3;
	КонецЕсли;
	ВК_ADODB = Новый COMОбъект("ADODB.Stream");
	ВК_ADODB.Type = 1;
	ВК_ADODB.Open();
	ВК_ADODB.LoadFromFile(ВременныйФайл);	
	Пока НЕ ВК_ADODB.EOS Цикл
		ВК_Capicom.Hash(ВК_ADODB.Read());
	КонецЦикла; 
	Попытка
		УдалитьФайлы(ВременныйФайл);
	Исключение
	КонецПопытки;
	Возврат НРег(ВК_Capicom.Value);
КонецФункции
Показать

Функция работает нормально если ее кормить латиницей :)
Почему сделал через временный файл - потому что я дурак не понял как напрямую строку передавать :)
Указанная ниже конструкция возвращает неверный хеш для "asd". Как я понял это связано с кодировками, сообразить как все сделать нормально - я не смог :)
	ВК_Capicom = Новый COMОбъект("CAPICOM.HashedData");
	ВК_Capicom.Algorithm = 3;
	ВК_Capicom.Hash("asd");
	Возврат ВК_Capicom.Value;
15. yoyoman 25.04.12 04:47 Сейчас в теме
stream.charset = "Windows-1251"

Ругается
Произошла исключительная ситуация (ADODB.Stream): Операция не допускается в данном контексте.
16. d0dger 84 25.04.12 10:14 Сейчас в теме
ругается потому что тип файла - бинарный (stream.Type = 1;), для него нет кодировок, просто последовательность байтов.
Можно попробовать
stream.Type = 2;
stream.charset = "windows-1251";

а вообще я с кириллицей не воевал, это тема отдельных экспериментов )
17. irbis_triffle 1 21.05.12 21:48 Сейчас в теме
По-поводу хеша строки:
(нагло содрано с миста.ру, автору поста "aka MIK" - огромное спасибо!! ):
Функция MD5(КодируемаяСтрока) Экспорт
    //http://pajhome.org.uk/crypt/md5/index.html
 
    ScrptCtrl = CreateObject("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "JScript";
    ScrptCtrl.AddCode("
    |var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase    */
    |var b64pad = """"; /* base-64 pad character. ""="" for strict RFC compliance  */ 
    |var chrsz  = 8; /* bits per input character. 8 - ASCII; 16 - Unicode   */
    |function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
    |function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
    |function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
    |function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
    |function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
    |function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
    |function md5_vm_test()
    |{
    | return hex_md5(""abc"") == ""900150983cd24fb0d6963f7d28e17f72"";
    |}
    |function core_md5(x, len)
    |{
    | /* append padding */
    | x[len >> 5] |= 0x80 << ((len) % 32);
    | x[(((len + 64) >>> 9) << 4) + 14] = len;
    |
    | var a = 1732584193;
    | var b = -271733879;
    | var c = -1732584194;
    | var d = 271733878;
    |
    | for(var i = 0; i < x.length; i += 16)
    | {
    |  var olda = a;
    |  var oldb = b;
    |  var oldc = c;
    |  var oldd = d;
    |
    |  a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    |  d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    |  c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
    |  b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    |  a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    |  d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
    |  c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    |  b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    |  a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
    |  d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    |  c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    |  b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    |  a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
    |  d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    |  c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    |  b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
    |
    |  a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    |  d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    |  c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
    |  b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    |  a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    |  d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
    |  c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    |  b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    |  a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
    |  d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    |  c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    |  b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
    |  a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    |  d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    |  c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
    |  b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
    |
    |  a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    |  d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    |  c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
    |  b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    |  a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    |  d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
    |  c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    |  b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    |  a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
    |  d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    |  c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    |  b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
    |  a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    |  d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    |  c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
    |  b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
    |
    |  a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    |  d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
    |  c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    |  b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    |  a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
    |  d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    |  c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    |  b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    |  a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
    |  d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    |  c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    |  b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
    |  a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    |  d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    |  c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
    |  b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
    |
    |  a = safe_add(a, olda);
    |  b = safe_add(b, oldb);
    |  c = safe_add(c, oldc);
    |  d = safe_add(d, oldd);
    | }
    | return Array(a, b, c, d);
    |
    |}
    |
    |/*
    | * These functions implement the four basic operations the algorithm uses.
    | */
    |function md5_cmn(q, a, b, x, s, t)
    |{
    | return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
    |}
    |function md5_ff(a, b, c, d, x, s, t)
    |{
    | return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
    |}
    |function md5_gg(a, b, c, d, x, s, t)
    |{
    | return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
    |}
    |function md5_hh(a, b, c, d, x, s, t)
    |{
    | return md5_cmn(b ^ c ^ d, a, b, x, s, t);
    |}
    |function md5_ii(a, b, c, d, x, s, t)
    |{
    | return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
    |}
    |
    |/*
    | * Calculate the HMAC-MD5, of a key and some data
    | */
    |function core_hmac_md5(key, data)
    |{
    | var bkey = str2binl(key);
    | if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
    |
    | var ipad = Array(16), opad = Array(16);
    | for(var i = 0; i < 16; i++)
    | {
    |  ipad[i] = bkey[i] ^ 0x36363636;
    |  opad[i] = bkey[i] ^ 0x5C5C5C5C;
    | }
    |
    | var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
    | return core_md5(opad.concat(hash), 512 + 128);
    |}
    |
    |/*
    | * Add integers, wrapping at 2^32. This uses 16-bit operations internally
    | * to work around bugs in some JS interpreters.
    | */
    |function safe_add(x, y)
    |{
    | var lsw = (x & 0xFFFF) + (y & 0xFFFF);
    | var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    | return (msw << 16) | (lsw & 0xFFFF);
    |}
    |
    |/*
    | * Bitwise rotate a 32-bit number to the left.
    | */
    |function bit_rol(num, cnt)
    |{
    | return (num << cnt) | (num >>> (32 - cnt));
    |}
    |
    |/*
    | * Convert a string to an array of little-endian words
    | * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
    | */
    |function str2binl(str)
    |{
    | var bin = Array();
    | var mask = (1 << chrsz) - 1;
    | for(var i = 0; i < str.length * chrsz; i += chrsz)
    |  bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
    | return bin;
    |}
    |
    |/*
    | * Convert an array of little-endian words to a string
    | */
    |function binl2str(bin)
    |{
    | var str = """";
    | var mask = (1 << chrsz) - 1;
    | for(var i = 0; i < bin.length * 32; i += chrsz)
    |  str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
    | return str;
    |}
    |
    |/*
    | * Convert an array of little-endian words to a hex string.
    | */
    |function binl2hex(binarray)
    |{
    | var hex_tab = hexcase ? ""0123456789ABCDEF"" : ""0123456789abcdef"";
    | var str = """";
    | for(var i = 0; i < binarray.length * 4; i++)
    | {
    |  str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
    |      hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
    | }
    | return str;
    |}
    |
    |/*
    | * Convert an array of little-endian words to a base-64 string
    | */
    |function binl2b64(binarray)
    |{
    | var tab = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345­6789+/"";
    | var str = """";
    | for(var i = 0; i < binarray.length * 4; i += 3)
    | {
    |  var triplet = (((binarray[i  >> 2] >> 8 * ( i  %4)) & 0xFF) << 16)
    |        | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
    |        | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    |  for(var j = 0; j < 4; j++)
    |  {
    |   if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
    |   else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    |  }
    | }
    | return str;
    |}
    |");
    
    Хэш = "";
    Хэш = ScrptCtrl.Run("hex_md5", КодируемаяСтрока);
    ScrptCtrl = "";
    
    Возврат Хэш;
КонецФункции // MD5()
Показать


От себя добавлю, что для пользователей версии 8.* необходимо заменить
   ScrptCtrl = CreateObject("MSScriptControl.ScriptControl");

на
   ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
18. yandextesting 148 05.10.12 13:49 Сейчас в теме
в 8.3 реализовано на уровне платформы

...
Хеш = ПолучитьMD5_Сервер(ТекстДляХеша);
...

Функция ПолучитьMD5_Сервер(Текст)

ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
ОбъектХеш.Добавить(Текст);
Возврат ОбъектХеш.ХешСумма;

КонецФункции // ПолучитьMD5_Сервер
Показать
NewLifeMan; loy; u_n_k_n_o_w_n; ya.Avoronov; ekaruk; BigB; Огонек; +7 Ответить
19. d0dger 84 05.10.12 13:53 Сейчас в теме
Интересно, а есть ограничения на размер строки в 8.3?
20. NastyMosk 13.05.13 08:06 Сейчас в теме
Спасибо большое! Очень помогла данная реализация. Перепробовала много алгоритмов, но результат не совпадал с результатом на принимающей файл стороне. Только этот вариант подошел
21. Angeros 09.08.13 12:57 Сейчас в теме
Что делать тем кто хочет хешировать картинки и выдается ошибка


Ошибка при вызове конструктора (COMОбъект)
crypt = Новый COMОбъект("CAPICOM.HashedData");
по причине:
Недопустимая строка с указанием класса

?
23. NAKIS 5 18.12.13 17:33 Сейчас в теме
Спасибо, если самому не получится реализовать, то качну)))
Но лень, это такая злая штука...))
Оставьте свое сообщение