PSD
Главный специалист
Offline
Пол:
|
|
« : 26-05-2004 06:19 » |
|
или другой алгоритм хеширования с длиной кеша не меньше 16 байт...
(хорошо бы API)
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Anonymous
Гость
|
|
« Ответ #1 : 26-05-2004 07:34 » |
|
SHA1 описан в RFC 3174. В документе приведена эталонная реализация. Стандарт дефакто в мире открытого софта -- реализация в библиотеке libcrypto проекта openssl. В openssl реализованы MD5, SHA1, SHA2 и множество алгоритмов шифрования.
|
|
|
Записан
|
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #3 : 26-05-2004 10:40 » |
|
Спасибо сейчас посмотрю, ... сам пока полазилп о SDK нашел ADVAPI32.dll поддержку шифрования... в принципе судя по опесанию для моих целей это подходит ... учитывая что это у же встроино во все винды начиная с 98.
Никак не могу разобраться что делать сключами.... и как обнулить хешь. Мне нужно считать хешь для файлов ... не могу понять как сохранить и какой ключь чтоб потом можно было проверить хешь?
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
npak
|
|
« Ответ #4 : 26-05-2004 11:28 » |
|
PSD, у меня в MSDN October 2001 есть раздел Platform SDK->Security->Cryptography->CryptoAPI
В этом разделе есть про SHA1. Смотри функцию CryptCreateHash и компанию.
Если в связке с SHA1 упоминается ключ, то это не то, что тебе надо. Как я понимаю, тебе нужно считать контрольную сумму файла. Это называется MAC -- message authentication code. MAC используется для проверки случайных изменений содержимого сообщения при транспортировке. MAC не может защитить от злонамеренного искажения сообщения, при котором враг меняет сообщение и пересчитывает контрольную сумму. Для такой защиты используется хэширование с ключом -- HMAC. Даже если враг перехватил и изменил сообщение, пересчитать контрольную сумму он не сможет, так как не знает ключ, который подмешивается в сообщение при вычислении контрольной суммы.
|
|
|
Записан
|
|
|
|
npak
|
|
« Ответ #5 : 26-05-2004 12:22 » |
|
PSD, по моему, не стоит с микрософтовской подсистемой криптографии заморачиваться. Я взял сорсы из RFC 3174, немного подкрутил для VC 6.0 и оно заработало. Никаких проблем и затруднений. В том же RFC пример, как пользоваться предложенной реализацией. Вот подкрутка, которую надо внести в sha1.h из RFC. Вместо включения стандартного заголовка POSIX stdint.h на винде надо ручками сделать типы, которыми пользуется реализация. #ifndef WIN32 #include <stdint.h> #else /* * If you do not have the ISO standard stdint.h header file, then you * must typdef the following{ * name meaning * uint32_t unsigned 32 bit integer * uint8_t unsigned 8 bit integer )i.e., unsigned char: * int_least16_t integer of >= 16 bits * */
typedef unsigned int uint32_t; typedef unsigned char uint8_t; typedef short int int_least16_t; #endif
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #6 : 26-05-2004 12:36 » |
|
У меня задача не много другая мне нужно реализовать чтото вроде индексации для поиска на файловом серевере дубликатов файлов .... файлов МНОГО в качестве первого уровня я хочу использовать базу контрольный сумм но так как файлов МНОГО то мощности контрольной суммы даже 32х разрядной не хватает... и я для этого хочу использовать какой нибудь стандартный и жела тельно встроеный в винды алгоритм хеширования... в качестве основы решил взять SHA1 20 байт мне в полне достаточно.... чтоб различать 2-3 милиона файлов... запнулся на том что мне нужно като сохранить закрытый ключ и для базы он должен быть один раз и навсегда ..... Инициализация провайдера, генерация ключа, установка ключа проходят на ура, а вот сохранить и потом заново инициализировать ключ не получается... В лоб воспользоваться CryptExportKey не получилось
if (!CryptAcquireContext(&phProv,NULL,NULL,PROV_RSA_FULL,0)){errmsg("CryptAcquireContext");};
if (!CryptGenKey(phProv,CALG_RC2,CRYPT_EXPORTABLE,&hKey)){errmsg("CryptGenKey ");};
if (!CryptExportKey(hKey,NULL,PRIVATEKEYBLOB,0,NULL,&KeyLen)){errmsg("CryptExportKey ");}; Key=(BYTE *) malloc(KeyLen); if (!CryptExportKey(hKey,NULL,PRIVATEKEYBLOB,0,Key,&KeyLen)){errmsg("CryptExportKey 1 ");}; }
не получилось она упорно говорит что свеже сгенерированый ключ не правельный или его нет во все .....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #7 : 26-05-2004 12:41 » |
|
Сходил на openssl не понял как ее скачать целиком там куча версий но они като частями гдето одного нет гдето другого .....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
npak
|
|
« Ответ #8 : 26-05-2004 13:10 » |
|
У меня задача не много другая мне нужно реализовать чтото вроде индексации для поиска на файловом серевере дубликатов файлов .... файлов МНОГО в качестве первого уровня я хочу использовать базу контрольный сумм но так как файлов МНОГО то мощности контрольной суммы даже 32х разрядной не хватает... и я для этого хочу использовать какой нибудь стандартный и жела тельно встроеный в винды алгоритм хеширования... в качестве основы решил взять SHA1 20 байт мне в полне достаточно.... чтоб различать 2-3 милиона файлов... запнулся на том что мне нужно като сохранить закрытый ключ и для базы он должен быть один раз и навсегда ..... Для индексирования тебе нет надобности хэшировать с ключом. Достаточно простой реализации из RFC (ведь в первом постинге ты спрашивал про сорсы тоже). Инициализация провайдера, генерация ключа, установка ключа проходят на ура, а вот сохранить и потом заново инициализировать ключ не получается... В лоб воспользоваться CryptExportKey не получилось
не получилось она упорно говорит что свеже сгенерированый ключ не правельный или его нет во все ..... Вот вот. От лукавого это, пользоваться такой большой пушкой. Пока её настроишь ... Наверное, ты будешь пользоваться каким-то скриптом для работы. Тогда можно воспользоваться уже готовыми программами, например md5sum (128-битный хэш) и sha1sum. Соответственно: http://www.ossh.com/gnu-win32/md5sum.exehttp://www.ossh.com/gnu-win32/sha1sum.exe
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #9 : 27-05-2004 04:59 » |
|
Про openssl и libcrypto там уних преведено куча ресурсов для скачивания обозваны они примерно так openssl-engine-0.9.6h.tar.gz (MD5) (PGP sign) я так понимаю что это шифр .... как это правельно читать и как согласно этой номенклатуре должен зазываться полный пакет? (я тут скачал 4 верхних а там както все кусками толи архивы поврежденые толи еще чтото половино h пустые)
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #10 : 27-05-2004 05:35 » |
|
Ем.... я тото не правельно понял или это библиотека для перла? мне нужно сие в VC ++ втащить.....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Антон (LogRus)
|
|
« Ответ #11 : 27-05-2004 06:00 » |
|
|
|
|
Записан
|
Странно всё это....
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #13 : 27-05-2004 07:17 » |
|
Все я вехал ...... для того чтобы получить нормальный бинарник нужно было скачать перл и обработать им файлы до получения asm для соответствующего компилятора...
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #14 : 27-05-2004 08:08 » |
|
очень удобно краткое описание + homepage + платформы А зечем именно 16 байт по ГОСТу 27148-89 и то меньше 8.
Потому что хешь предполоагется использовать для первичного сравнения файлов в большом файловом массиве ... если все пойдет как я предпологаю то в очень большом...... порядка 2-3 милионов файлов поэтому беру с запасом ... будет много лишнее уберем
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
npak
|
|
« Ответ #15 : 27-05-2004 10:25 » |
|
PSD, в качестве хэша можно взять размер файла. ИМХО, довольно хорошее приближение для различения файлов.
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #16 : 28-05-2004 07:53 » |
|
Для картинок плохое.... они иметю тенденцию иметь стандартный размер ....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
|