Что означает код HRESULT 0x80090012 (NTE_DOUBLE_ENCRYPT)?

 
Предыдущий Следующий
NTE_NOT_FOUND NTE_BAD_PROVIDER

NTE_DOUBLE_ENCRYPT

NTE_DOUBLE_ENCRYPT (0x80090012) — ошибка CryptoAPI, которая для CryptDecrypt означает повторную попытку расшифровать те же данные в том же криптографическом контексте. Это не сообщение о «слишком сильном шифровании»: проблема возникает в состоянии вызовов приложения.

Что означает ошибка

CryptDecrypt изменяет переданный буфер на месте и обновляет внутреннее состояние ключа. Если программа повторно передаёт уже обработанный буфер или повторяет финальный шаг расшифрования после неудачно организованного retry, поставщик может определить двойную обработку и вернуть NTE_DOUBLE_ENCRYPT.

Что проверить

  • Проследите жизненный цикл входного буфера: одни и те же зашифрованные байты не должны дважды проходить через CryptDecrypt без восстановления исходного ciphertext и состояния ключа.
  • Для потокового расшифрования проверьте значение параметра Final. Финальный вызов должен выполняться один раз только для последнего фрагмента сообщения.
  • Если код повторяет операцию после ошибки, убедитесь, что retry начинается с неизменённой копии шифротекста и корректно переинициализированного ключевого состояния.
  • Проверьте ownership буфера между слоями приложения: callback, wrapper или обработчик исключения не должен незаметно вызывать расшифрование повторно для уже обработанного блока.

См. документацию Microsoft по CryptDecrypt.


Нужно найти другой код? Найти другой код состояния или ошибки.