Магазин IV и Ключ для Рейндаэля - PullRequest
0 голосов
/ 28 июня 2010

Мне нужно хранить имя пользователя и пароль в app.config. Я хочу зашифровать эти значения, используя алгоритм Rijndael. Где я могу хранить ключ и IV для расшифровки un и pw? Мне нужно развернуть приложение на разных серверах с разными пользователями.

Ответы [ 4 ]

1 голос
/ 28 июня 2010

Шифрование файла web.config или app.config обычно выполняется с использованием шифрования RSA или DPAPI.

Я не уверен, что это подойдет вам в вашем случае, это эффективно, только если пользователи приложений ограничены, а не администраторы.

http://msdn.microsoft.com/en-us/library/ff647398.aspx

0 голосов
/ 28 июня 2010

Как насчет использования шифрования машинного ключа для этого?Насколько я знаю, не существует простого способа сделать это, но вы можете взломать свой путь в фреймворке, используя рефлексию.Ключ машины либо не хранится, либо хранится только частично.Если вы настроите ASP.NET для «Генерирования уникального ключа для каждого приложения», для получения ключа будет использован путь к приложению.

Код будет выглядеть примерно так:

private static MethodInfo _cookieEncryptMethod;
private static MethodInfo _cookieDecryptMethod;

public static string MachineKeyEncrypt(string data)
{
    if (_cookieEncryptMethod == null)
    {
        _cookieEncryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Encode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
    }

    var dataBytes = Encoding.UTF8.GetBytes(data);

    return (string) _cookieEncryptMethod.Invoke(null, new object[] { CookieProtection.All, dataBytes, dataBytes.Length });
}

public static string MachineKeyDecrypt(string source)
{
    if (_cookieDecryptMethod == null)
    {
        _cookieDecryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Decode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
    }

    var data = (byte[]) _cookieDecryptMethod.Invoke(null, new object[] { CookieProtection.All, source });

    return Encoding.UTF8.GetString(data);
}
0 голосов
/ 28 июня 2010

В идеале для текстового файла в месте, недоступном через Интернет, только через локальную файловую систему с жесткими разрешениями.

Если вам нужно распространить приложение, вы можете использовать следующую структуру

  • C:\MyApp для ключа и другой частной информации
  • C:\MyApp\www для виртуального каталога

Это предотвратит доступ посторонних глаз (или ошибок веб-сервера) к данным. Только физический доступ к машине может раскрыть его, и этим обычно можно лучше управлять.

0 голосов
/ 28 июня 2010

Определенно не храните в сборке - относительно простой взгляд на IL, вероятно, откроет секрет. Даже осквернение этого обеспечит немного дополнительной безопасности.

Проще всего было бы использовать локальную защиту OS \ file-system на разных серверах для управления доступом для чтения к файлу ключа.

...