Конференция "WinAPI" » "Шифровка по Виндусовски" [D6, Win2k]
 
  • lead-in (06.02.08 18:01) [0]
    Пробовал поюзать API функции для шифрования файлов, использовал всего по минимому, в частности Microsoft Basic Cryptoprovider который, если верить описаниям, поддерживается всеми версиями Виндовса. Однако, попытка в WinXP "расшифровать" файл "закодированный" в Win2000 ничего не дала. Хотя если зашифр./расшифр. файлы в одной и той же системе - то всё нормально работает. Что я не так делаю? У них что отличаются эти самые криптопровайдеры для разных версий? Спрашивается, зачем вообще тогда такая "шифровка", если она жёстко привязана к версии ОС. Может у кого было что-то похожее или знает в чём проблема. Заранее благодарен...
  • slow!alfamoon!com (06.02.08 18:25) [1]
    Ну милок, код то покажи, там дело непростое, предсказывать не берусь, но предположения есть
  • Riply © (06.02.08 18:30) [2]
    > [0] lead-in   (06.02.08 18:01)
    Не уверена, но проблемма может быть в длинне ключа.
    Не помню с какого времени дали возможность использовать
    не 40-битный ключ.
    Иными словами, хочешь что-бы читали все - используй короткий ключ.
  • Eraser © (07.02.08 10:16) [3]

    > lead-in   (06.02.08 18:01) 

    [2] +
    проблема скорее всего в разной длине ключа по-умолчанию, её надо явно задавать.
  • slow!alfamoon!com (07.02.08 15:29) [4]
    Точно :) Я и забыл)
  • lead-in (08.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 © (08.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 (08.02.08 11:26) [7]

    > Размер ключа задается при его генерации.


    то есть при вызове CryptDeriveKey? там похожих параметров нет, разве что сам используемый алгоритм, наверно  CryptSetKeyParam надо разобрать...

    thanks for help to all)))
 
Конференция "WinAPI" » "Шифровка по Виндусовски" [D6, Win2k]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]