Небольшой пост про то как шифровать пароли для подключения к базам данных (и другие пароли) в настройках приложения. 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));
    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *