Шифровать / дешифровать на разных машинах нет-нет - PullRequest
3 голосов
/ 15 сентября 2008

Я использую идентичный вызов "CryptUnprotectData" (выставленный из Crypt32.dll) между XP и Vista. Прекрасно работает в XP. Я получаю следующее исключение при запуске в Vista:

"Decryption failed. Key not valid for use in specified state."

Как и ожидалось, версии crypt32.dll различаются в XP и Vista (на самом деле более ранняя версия w / XP, возможно, в результате SP3 или другого обновления).

Точнее говоря, я шифрую данные, помещаю их в реестр, затем читаю и дешифрую, используя «CryptUnprotectData». UAC выключен.

Кто-нибудь видел это раньше?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2008

В документации CryptUnprotectData говорится, что она обычно работает только тогда, когда у пользователя те же учетные данные, что и у шифратора.

Это подсказывает мне, что, возможно, ключ связан с текущим токеном пользователя. Поскольку вы упоминаете Vista, это заставляет меня думать о UAC и ограниченных токенах.

Можете показать нам какой-нибудь код? Можете ли вы дать нам больше информации о том, что вы делаете с данными - т.е. перемещаете ли вы их между процессами, пользователями или компьютерами?

1 голос
/ 15 сентября 2008

Nice. Надеюсь, это мой костяк на этой неделе! ; -)

Это говорит о том, что, возможно, ключ привязан к текущему токену пользователя.

Вот и все. Оказывается, я использовал зашифрованные данные с другого компьютера (с XP) и пытался расшифровать на компьютере с Vista.

Как указано в документации MSDN:

Обычно только пользователь с таким же учетные данные для входа в систему как шифровщик может расшифровать данные. Кроме того, должно быть сделано шифрование и дешифрование на том же компьютере.

После того как я повторно зашифровал данные на компьютере с Vista, расшифровка работает как положено.

Спасибо.

...