-
Пробовал поюзать API функции для шифрования файлов, использовал всего по минимому, в частности Microsoft Basic Cryptoprovider который, если верить описаниям, поддерживается всеми версиями Виндовса. Однако, попытка в WinXP "расшифровать" файл "закодированный" в Win2000 ничего не дала. Хотя если зашифр./расшифр. файлы в одной и той же системе - то всё нормально работает. Что я не так делаю? У них что отличаются эти самые криптопровайдеры для разных версий? Спрашивается, зачем вообще тогда такая "шифровка", если она жёстко привязана к версии ОС. Может у кого было что-то похожее или знает в чём проблема. Заранее благодарен...
-
Ну милок, код то покажи, там дело непростое, предсказывать не берусь, но предположения есть
-
> [0] lead-in (06.02.08 18:01) Не уверена, но проблемма может быть в длинне ключа. Не помню с какого времени дали возможность использовать не 40-битный ключ. Иными словами, хочешь что-бы читали все - используй короткий ключ.
-
> lead-in (06.02.08 18:01)
[2] + проблема скорее всего в разной длине ключа по-умолчанию, её надо явно задавать.
-
Точно :) Я и забыл)
-
собсно всё дело состоит в вызове неск. функций ============= ... сначала чтение из файла if not CryptAcquireContext(@hProv, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then ...
if not CryptCreateHash(hProv, CALG_SHA, 0, 0, @hHash) then ...
if not CryptHashData(hHash, PByte(pswd), length(pswd), 0) then
if not CryptDeriveKey(hProv, CALG_RC4, hHash, 0, @hKey) then ...
dwDataLen := in_size;
dwBufLen := dwDataLen;
if not CryptEncrypt(hKey, 0, true, 0, nil, @dwBufLen, 0) then ...
SetLength(map, dwBufLen);
if not CryptEncrypt(hKey, 0, true, 0, @map[0], @dwDataLen, dwBufLen) then ... ... а дальше запись про длину ключа понял, хотя куда её прописывать пока неясно
-
> [5] lead-in (08.02.08 10:34) > про длину ключа понял, хотя куда её прописывать пока неясно
Размер ключа задается при его генерации. Только, если мне не изменяет память, Microsoft Basic Cryptoprovider, например, от Win98 "проглотит" и 128-битный и 1024-битный ключ, но релальный размер будет 40 бит - остальное забивается нулями. Про Win2000 ничего не могу сказать, но возможна та же катавасия :)
P.S. Мне больше нравился Strong Cryptoprovider, Basic - устаревший. Да и по умолчанию, вроде стоит Strong, как для пользователя, так и для системы. Давно все это было, могу ошибаться.
-
> Размер ключа задается при его генерации.
то есть при вызове CryptDeriveKey? там похожих параметров нет, разве что сам используемый алгоритм, наверно CryptSetKeyParam надо разобрать...
thanks for help to all)))
|