Шифрование / дешифрование на разных машинах - это запрет

StackOverflow https://stackoverflow.com/questions/64258

Вопрос

Я использую идентичный вызов "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, расшифровка работает так, как ожидалось.

Спасибо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top