| ||||
| ||||
Как перевести следующий фрагмент на CryptoAPI ? #include <mcrypt.h> mtd = mcrypt_module_open ("rijndael-128", NULL, "cbc", NULL); rc = mcrypt_generic_init (mtd, key, 16, iv); Делаю так: 1. CryptAcquireContext CSP, 0, 0, PROV_RSA_AES, 0 - Открыли CSP 2. CryptCreateHash CSP, CALG_MD5, 0, 0, Hash - создаем ХЕШ. Кстати, какой надо ? MD5 ли ? 3. CryptHashData Hash, key(0), 16, 0 - Хешируем начальное значение ключа. Наверняка это не верно... 4. CryptDeriveKey CSP, CALG_AES_128, Hash, 0, AESKey - Создаем AES-ключ по хешу 5. CryptDestroyHash Hash - убиваем ХЕШ 6. CryptSetKeyParam AESKey, 1, iv(0), 0 - Устанавливаем AES-ключу Инициализирующий вектор 7. CryptEncrypt AESKey, 0, 1, 0, buffer(0), dwBlockLen, dwBufferLen - Шифруем буфер Проблема - во 2 и 3-й строке. Написал их от фонаря. Не понимаю - как корректно использовать KEY при создании AESKey. Путем его хеширования MD5 и генерации AES-KEY по этому хешу ? Или как ? Заранее благодарен | ||||
Ответы: | ||||
| ||||
Примерно так, только перед созданием ключа вызвать CryptGenRandom и захэшировать полученую последовательность. Или нужно использовать существующий ключ? | ||||
| ||||
Да, в том и проблема, что мне нужно создать точно такой же ключ, который создается по команде mtd = mcrypt_module_open ("rijndael-128", NULL, "cbc", NULL); rc = mcrypt_generic_init (mtd, key, 16, iv); (KEY и IV - известные 16-байтовые массивы). Иными словами: MTD - это функция двух переменных (KEY и IV). Как при генерации моего ключа использовать IV - я знаю: CryptSetKeyParam AESKey, KP_IV, iv(0), 0 - Устанавливаем AES-ключу Инициализирующий вектор А вот как использовать KEY ? | ||||