| ||||
| ||||
Возник вопрос как шифровать файл. (в примерах 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. | ||||
Ответы: | ||||
| ||||
CryptAcquireContext( , , ,5 ,) это описка там 75 как в примере.. if (!CryptAcquireContext( &m_hCryptProv, ContainerName, NULL, 75, CreateNew ? CRYPT_NEWKEYSET : 0)) | ||||