06.10.2006 16:28:47шифрование файла (CRYPT_MODE_OFB?) Ответов: 1
Alexander
Возник вопрос как шифровать файл. (в примерах Encrypt/DecryptFile он по умолчанию шифруется врозможно неправильно)

Я делаю:

CryptAcquireContext( &m_hCryptProv, ContainerName,NULL,5, 0);

CryptGenKey( m_hCryptProv,CALG_G28147,CRYPT_EXPORTABLE, m_hSessionKey));

for()
{.. CryptEncrypt(..)..}

for()
{.. CryptDecrypt(..) ..}

При этом в расшифрованом файле в начале каждого блока (в примере этот блок 4кб) мусор

если сделать
CryptGetKeyParam()
то показывает что режим CRYPT_MODE_OFB (он же CRYPT_MODE_CNT)

В примере делается
CryptGetKeyParam( m_hSessionKey, KP_IV,Vector,&dwIV, 0);
перед Encrypt и
СryptSetKeyParam(m_hSessionKey,ЛP_IV,Vector,0);
перед Decrypt

да это исправляет ситуацию , НО только для ПЕРВОГО блока
а для всех остальных все равно мусор в начале блока

Соотв если делать это перед каждым блоком то все ОК
(в примере кстати это делается ТОЛЬКО один раз и соотв со второго блока в начале блока мусор)

Вопрос как сделать НОРМАЛЬНОЕ шифрование файла
(нельзя же для каждого блока хранить еще и доп 8 байт вектора)?

Я так понимаю это все зависит от режима шифрования
(CRYPT_MODE_ECB/CNT/CFB/CBC)

Пытаюсь выставить режим при генерации ключа
CryptGenKey( m_hCryptProv,
CALG_G28147, CRYPT_EXPORTABLE, &m_hSessionKey);

DWORD mode=CRYPT_MODE_ECB;
BOOL status=CryptSetKeyParam(
m_hSessionKey,
KP_MODE,
(BYTE*)(&mode),
0);

Но это приводит вообще к полностью неправ расшифровке..

Подскажите в чем делаю ошибку (и как предполагалась нормальная работа примеров CryptFile/DecryptFile)?

Thanks.






 
Ответы:
06.10.2006 16:31:17alexander
CryptAcquireContext( , , ,5 ,) это
описка там 75 как в примере..

if (!CryptAcquireContext( &m_hCryptProv,
ContainerName,
NULL,
75,
CreateNew ? CRYPT_NEWKEYSET : 0))