Форум: "WinAPI";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];
Вниз"Шифровка по Виндусовски" Найти похожие ветки
← →
lead-in (2008-02-06 18:01) [0]Пробовал поюзать API функции для шифрования файлов, использовал всего по минимому, в частности Microsoft Basic Cryptoprovider который, если верить описаниям, поддерживается всеми версиями Виндовса. Однако, попытка в WinXP "расшифровать" файл "закодированный" в Win2000 ничего не дала. Хотя если зашифр./расшифр. файлы в одной и той же системе - то всё нормально работает. Что я не так делаю? У них что отличаются эти самые криптопровайдеры для разных версий? Спрашивается, зачем вообще тогда такая "шифровка", если она жёстко привязана к версии ОС. Может у кого было что-то похожее или знает в чём проблема. Заранее благодарен...
← →
slow!alfamoon!com (2008-02-06 18:25) [1]Ну милок, код то покажи, там дело непростое, предсказывать не берусь, но предположения есть
← →
Riply © (2008-02-06 18:30) [2]> [0] lead-in (06.02.08 18:01)
Не уверена, но проблемма может быть в длинне ключа.
Не помню с какого времени дали возможность использовать
не 40-битный ключ.
Иными словами, хочешь что-бы читали все - используй короткий ключ.
← →
Eraser © (2008-02-07 10:16) [3]
> lead-in (06.02.08 18:01)
[2] +
проблема скорее всего в разной длине ключа по-умолчанию, её надо явно задавать.
← →
slow!alfamoon!com (2008-02-07 15:29) [4]Точно :) Я и забыл)
← →
lead-in (2008-02-08 10:34) [5]собсно всё дело состоит в вызове неск. функций
=============
... сначала чтение из файла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 ...
... а дальше запись
про длину ключа понял, хотя куда её прописывать пока неясно
← →
Riply © (2008-02-08 10:55) [6]> [5] lead-in (08.02.08 10:34)
> про длину ключа понял, хотя куда её прописывать пока неясно
Размер ключа задается при его генерации.
Только, если мне не изменяет память, Microsoft Basic Cryptoprovider,
например, от Win98 "проглотит" и 128-битный и 1024-битный ключ, но релальный размер
будет 40 бит - остальное забивается нулями.
Про Win2000 ничего не могу сказать, но возможна та же катавасия :)
P.S.
Мне больше нравился Strong Cryptoprovider, Basic - устаревший.
Да и по умолчанию, вроде стоит Strong, как для пользователя, так и для системы.
Давно все это было, могу ошибаться.
← →
lead-in (2008-02-08 11:26) [7]
> Размер ключа задается при его генерации.
то есть при вызове CryptDeriveKey? там похожих параметров нет, разве что сам используемый алгоритм, наверно CryptSetKeyParam надо разобрать...
thanks for help to all)))
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c