Как лучше всего сохранять пароли с помощью функции C # Settings? - PullRequest
5 голосов
/ 15 октября 2010

Я использую встроенную функцию Visual C # Настройки , чтобы сохранить некоторые параметры моей программы. Я также хочу сохранить один пароль, но затем он становится общедоступным ... возможно ли зашифровать пароль перед его сохранением, используя этот метод настроек, а затем расшифровать его обратно?

Ответы [ 3 ]

4 голосов
/ 15 октября 2010

Простой способ сделать это - зашифровать пароль самостоятельно.Вы никогда не сможете расшифровать его, но сможете сравнить с введенным пользователем паролем.

4 голосов
/ 15 октября 2010

Для простого шифрования я использовал DPAPI через класс ProtectedData .Чтобы сделать результирующее зашифрованное значение сохраняемым в текстовом файле или реестре, я кодирую результирующий байтовый массив.

Вот класс, который я написал, чтобы обернуть это:

namespace SomeNamespace
{
   using System;
   using System.Security.Cryptography;
   using System.Text;

   /// <summary>
   /// used for encryption and decryption
   /// </summary>
   public static class DataProtector
   {
      private const string EntropyValue = "secret";

      /// <summary>
      /// Encrypts a string using the DPAPI.
      /// </summary>
      /// <param name="stringToEncrypt">The string to encrypt.</param>
      /// <returns>The encrypted data.</returns>
      public static string EncryptData(string stringToEncrypt)
      {
         byte[] encryptedData = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
         return Convert.ToBase64String(encryptedData);
      }

      /// <summary>
      /// Decrypts a string using the DPAPI.
      /// </summary>
      /// <param name="stringToDecrypt">The string to decrypt.</param>
      /// <returns>The decrypted data.</returns>
     public static string DecryptData(string stringToDecrypt)
      {
         byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
         return Encoding.Unicode.GetString(decryptedData);
      }
   }
}
2 голосов
/ 15 октября 2010

Если вы зашифруете пароль, вам все равно придется хранить ключ дешифрования где-то в программе, так что он все равно будет означать безопасность по незаметности.

Однако, будет сохранятьчестные люди честные.

Самая распространенная практика, которую я видел для этого, - это система вызова / ответа, где пользователь вводит регистрационное имя, программа предоставляет строку запроса, и вы отправляете им соответствующую строку ответа по электронной почте.(зашифрованный), который пользователь вырезает и вставляет в диалог регистрации в программе.Программа расшифровывает ответ, сравнивает его с запросом, и все готово.

Конечно, поскольку вам все равно нужно предоставить пароль дешифрования в самой программе, он все равно может быть побежден решительным хакером.

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