C#. DPAPI. Хранение паролей в зашифрованном виде.
Небольшой пост про то как шифровать пароли для подключения к базам данных (и другие пароли) в настройках приложения. API защиты данных (DPAPI), позволяет шифровать данные с помощью сведений из текущей учетной записи пользователя или компьютера. Использование API защиты данных позволяет упростить сложную задачу явного создания и хранения криптографического ключа. Полностью можно почитать тут.
Взял код от сюда
Ниже метод позволяющий зашифровать данные. Где,
stringToEncrypt — строка для шифрования,
optionalEntropy — строка для добавления соли в пароль,
DataProtectionScope — указывается каким ключом шифровать System.Security.Cryptography.DataProtectionScope.LocalMachine или System.Security.Cryptography.DataProtectionScope.CurrentUser
Существует два режима шифрования:
CurrentUser: защищенные данные связаны с текущим пользователем. Только потоки, работающие в контексте текущего пользователя, могут снять защиту данных.
LocalMachine: защищенные данные связаны с контекстом компьютера. Любой процесс, запущенный на компьютере, может снять защиту данных. Это значение перечисления обычно используется в серверных приложениях, которые выполняются на сервере, доступ к которому недоверенным пользователям запрещен.
public static string Protect(string stringToEncrypt, string optionalEntropy, DataProtectionScope scope)
{
return Convert.ToBase64String(
ProtectedData.Protect(
Encoding.UTF8.GetBytes(stringToEncrypt)
, optionalEntropy != null ? Encoding.UTF8.GetBytes(optionalEntropy) : null
, scope));
}
Метод для дешифрования, где: encryptedString
— строка для дешифровки.
optionalEntropy
— строка (соль) при шифровании.
DataProtectionScope
читаем выше.
public static string Unprotect(string encryptedString, string optionalEntropy, DataProtectionScope scope)
{
return Encoding.UTF8.GetString(
ProtectedData.Unprotect(
Convert.FromBase64String(encryptedString)
, optionalEntropy != null ? Encoding.UTF8.GetBytes(optionalEntropy) : null
, scope));
}