| ||||
| ||||
Возник вопрос как шифровать файл. (в примерах Encrypt/DecryptFile он по умолчанию шифруется врозможно неправильно) Я делаю: CryptAcquireContext( &m_hCryptProv, ContainerName,NULL,75, 0); CryptGenKey( m_hCryptProv,CALG_G28147,CRYPT_EXPORTABLE, m_hSessionKey)); for() {.. CryptEncrypt(..)..} for() {.. CryptDecrypt(..) ..} При этом в расшифрованом файле в начале каждого блока (в примере этот блок 4кб) мусор Это как я понял типовая ситуация т.к. вектор изменяется каждый раз после Encrypt CryptGetKeyParam() показывает что режим по умолчанию CRYPT_MODE_OFB (он же CRYPT_MODE_CNT) В примере делается CryptGetKeyParam( m_hSessionKey, KP_IV,Vector,&dwIV, 0); перед Encrypt и СryptSetKeyParam(m_hSessionKey,ЛP_IV,Vector,0); перед Decrypt да это исправляет ситуацию , НО только для ПЕРВОГО блока а для всех остальных все равно мусор в начале блока Соотв если делать это перед каждым блоком то все ОК НО ХОТЕЛОСЬ бы делать только один раз. (в примере кстати это делается ТОЛЬКО ОДИН раз и соотв со второго блока в начале блока мусор) Вопрос как сделать установку вектора только один раз для ВСЕГО файла (много опреаций Crypt) (не хотелось бы для каждого блока хранить еще и доп 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. |