Шифрование / дешифрование на разных машинах - это запрет
-
09-06-2019 - |
Вопрос
Я использую идентичный вызов "CryptUnprotectData" (доступный из Crypt32.dll) между XP и Vista.Отлично работает в XP.Я получаю следующее исключение при запуске в Vista:
"Decryption failed. Key not valid for use in specified state."
Как и ожидалось, версии crypt32.dll отличаются между XP и Vista (на самом деле у XP более поздняя версия, возможно, в результате SP3 или какого-либо другого обновления).
Более конкретно, я шифрую данные, помещаю их в реестр, затем считываю и расшифровываю с помощью "CryptUnprotectData".Контроль доступа отключен.
Кто-нибудь видел это раньше?
Решение
Тот Самый Функция CryptUnprotectData в документации указано, что обычно это работает только тогда, когда у пользователя те же учетные данные для входа, что и у шифровальщика.
Это наводит меня на мысль, что, возможно, ключ привязан к текущему токену пользователя.Поскольку вы упомянули Vista, это наводит меня на мысль о UAC и ограниченных токенах.
Можете ли вы показать нам какой-нибудь код?Можете ли вы предоставить нам больше информации о том, что вы делаете с данными, т.е.вы перемещаете его между процессами, пользователями или компьютерами?
Другие советы
Неплохо.Надеюсь, это мой самый крутой ход недели!;-)
Это наводит меня на мысль, что, возможно, ключ привязан к текущему токену пользователя.
Вот и все.Оказывается, я использовал зашифрованные данные с другого компьютера (с XP) и пытался расшифровать на компьютере с Vista.
Как указано в документации MSDN:
Обычно только пользователь с теми же учетными данными для входа, что и у шифровальщика, может расшифровать данные.Кроме того,, шифрование и дешифрование должны выполняться на одном компьютере.
Как только я повторно зашифровал данные на компьютере Vista, расшифровка работает так, как ожидалось.
Спасибо.