Надежно храните пароли в Windows

В настоящее время я храню свои имена пользователей и пароли в базе данных SQL Server CE.

Я хотел бы использовать некоторый Windows API для безопасного хранения моих пользовательских паролей, чтобы никакое другое приложение, работающее на компьютере, не могло их прочитать.

Я поддерживаю Windows 7 и не могу использовать Password Vault

Я попытался использовать API CredWrite и CredRead, основываясь на приведенном здесь примере.

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

Есть ли другое жизнеспособное решение?

Похоже, что все, что использует Windows Security Account Manager, не будет делать.

2 ответа

Решение

Использовать API защиты данных (DPAPI)

  • CryptProtectData хранить данные
  • CryptUnprotectData чтобы получить данные

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

См. Пример C Программа: Использование CryptProtectData для примера.

DPAPI используется подавляющим большинством приложений для хранения паролей.

Поскольку вопрос помечен C#: Есть .NET управляемая оболочка вокруг DPAPI, который легче , чем при использовании Interop кода.

Наглядный пример того, как это использовать, можно найти здесь .

Если тип ProtectedData не может быть найден в пространстве имен System.Security.Cryptography не забудьте добавить это nuget package:

Install-Package System.Security.Cryptography.ProtectedData

Другие вопросы по тегам