Надежно храните пароли в 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