| ||||
| ||||
В CSP CryptoPro 3.0 есть сессионный ключ для CALG_G28147 (не важно как он создан). В нем установлен KP_MIXMODE в TRUE. Вопрос следующий - после того как вызвали: memcpy(&bData, &bDataCopy, 2000); pdwDataLen = 2000; CPEncrypt( hProv, hKey, 0, TRUE, 0, &bData, &dwDataLen, 2000 + 8 ); pdwDataLen = 2000; CPEncrypt( hProv, hKey, 0, TRUE, 0, &bDataCopy, &dwDataLen, 2000 + 8 ); будут ли равны по содержанию bData и bDataCopy? | ||||
Ответы: | ||||
| ||||
Зависит от значения KP_MODE. Для режимов с обратной связью (в т.ч. по умолчанию - CRYPT_MODE_CFB) после использования ключа меняется синхровектор ключа, и результат следующего зашифрования будет другим. | ||||
| ||||
То есть при режиме ECB (простой замены) все же будет одинаковый результат? Если да, то очень странно, что после того как произошло изменение ключа (KP_MIXMODE = TRUE и зашифрованно более 1024) и шифрование финальное (параметр BOOL Final = TRUE), сам ключ возвращается в первоначальное состояние, а его синхропосылка нет. Если я не ошибаюсь, то и в режиме простой замены при KP_MIXMODE = TRUE ключ тоже модифицируется после шифрования каждого 1024 байтного блока. При этом в изменении ключа участвует и его синхропосылка (хотя в режиме простой замены она и не используется). Тогда приведенный мной участок, при условии вашего ответа (синхропосылка не возвращается в первоначальное состояние), будет давать разные результаты bData и bDataCopy. | ||||