Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.21;
Скачать: CL | DM;

Вниз

"Шифровка по Виндусовски"   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2008.12.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1226413976
9899100
2008-11-11 17:32
2008.12.21
LoadFromStream объект класса


2-1226565725
DFT
2008-11-13 11:42
2008.12.21
RGB в GrayScale


10-1150442838
RomanH
2006-06-16 11:27
2008.12.21
Программно задать OLE-сервер


2-1226510112
art
2008-11-12 20:15
2008.12.21
Помогите переделать задачу из Pascal в Delphi


8-1188473003
T54
2007-08-30 15:23
2008.12.21
TVideoGraber