Как проще всего зашифровать пароль при сохранении его в реестре?
В настоящее время я пишу его открытым текстом 9X_encryption упс!, это собственная программа, так что это 9X_encrypt не так уж плохо, но я хотел бы сделать это 9X_c#-language правильно. Как мне зашифровать это при записи 9X_c#-language в реестр и как расшифровать?
OurKey.SetValue("Password", textBoxPassword.Text);
- Есть ответ на связанный вопрос - [Простое ...
Ответ #1
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Вы не расшифровываете пароли аутентификации!
Хешируйте их, используя что-то вроде поставщика 9X_c-sharp SHA256, а когда вам нужно оспорить, хешируйте 9X_encryption ввод от пользователя и посмотрите, совпадают 9X_encrypt ли два хеша.
byte[] data = System.Text.Encoding.ASCII.GetBytes(inputString); data = new System.Security.Cryptography.SHA256Managed().ComputeHash(data); String hash = System.Text.Encoding.ASCII.GetString(data);
Оставить пароли двусторонними 9X_c# - это действительно ужасная модель.
Edit2: Я думал, мы 9X_c-sharp только что говорили об аутентификации на 9X_c#-language линии фронта. Конечно, есть случаи, когда 9X_decrypt вы хотите зашифровать пароли для других 9X_encrypt вещей, которые должны быть обратимыми, но 9X_c#.net поверх всего этого должна быть односторонняя 9X_c#.net блокировка (за очень немногими исключениями).
Я 9X_password обновил алгоритм хеширования, но для максимальной 9X_data-encryption эффективности вы хотите сохранить a private salt and add that to your input before hashing it. Вы бы 9X_c#-language сделали это снова, когда сравните. Это добавляет 9X_data-encryption еще один слой, который еще больше усложняет 9X_c#-language обратное движение.
- ** Пожалуйста, не рекомендуйте MD5. ** [MD5 небезопасен для защиты паролей.] (Http://codahale.com/how-to-safely-store-a-password/) [MD5 поможет вам и вашим компания в новостях по неправильным причинам.] (http://www.h-online.com/secu ...
Ответ #2
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Также подумайте о том, чтобы "засолить" свой 9X_c#.net хеш (это не кулинарная концепция!). По сути, это 9X_c#-language означает добавление случайного текста к 9X_c#-language паролю перед его хешированием.
"The salt value helps to slow an attacker perform a dictionary attack should your credential store be compromised, giving you additional time to detect and react to the compromise."
Для 9X_visual-c# хранения хэшей паролей:
а) Создайте случайное 9X_encrypted значение соли:
byte[] salt = new byte[32]; System.Security.Cryptography.RNGCryptoServiceProvider.Create().GetBytes(salt);
б) Добавьте соль к паролю.
// Convert the plain string pwd into bytes byte[] plainTextBytes = System.Text UnicodeEncoding.Unicode.GetBytes(plainText); // Append salt to pwd before hashing byte[] combinedBytes = new byte[plainTextBytes.Length + salt.Length]; System.Buffer.BlockCopy(plainTextBytes, 0, combinedBytes, 0, plainTextBytes.Length); System.Buffer.BlockCopy(salt, 0, combinedBytes, plainTextBytes.Length, salt.Length);
в) Хешируйте 9X_password комбинированный пароль и соль:
// Create hash for the pwd+salt System.Security.Cryptography.HashAlgorithm hashAlgo = new System.Security.Cryptography.SHA256Managed(); byte[] hash = hashAlgo.ComputeHash(combinedBytes);
г) Добавьте 9X_c# соль к полученному хешу.
// Append the salt to the hash byte[] hashPlusSalt = new byte[hash.Length + salt.Length]; System.Buffer.BlockCopy(hash, 0, hashPlusSalt, 0, hash.Length); System.Buffer.BlockCopy(salt, 0, hashPlusSalt, hash.Length, salt.Length);
д) Сохраните результат 9X_c#.net в базе данных пользовательского магазина.
Этот 9X_c#.net подход означает, что вам не нужно хранить 9X_passwords соль отдельно, а затем повторно вычислять 9X_cipher хэш, используя значение соли и значение 9X_decryption пароля в виде открытого текста, полученное 9X_deciphering от пользователя.
Изменить. По мере того, как необработанные 9X_encryption вычислительные мощности становятся дешевле 9X_c#-language и быстрее, ценность хеширования - или хеширования 9X_encryption солей - снижается. Jeff Atwood has an excellent 2012 update слишком длинный, чтобы 9X_csharp повторять здесь полностью, в котором говорится:
Это 9X_encrypted (с использованием соленых хэшей) создаст 9X_c#-language иллюзию безопасности больше, чем любая реальная 9X_passwords безопасность. Поскольку вам нужны как соль, так 9X_encrypt и выбор алгоритма хеширования для генерации 9X_c#-language хеша и для проверки хеша, маловероятно, что 9X_encryption у злоумышленника будет один, но не другой. Если 9X_deciphering вы были скомпрометированы до такой степени, что 9X_passwords у злоумышленника есть ваша база данных паролей, разумно 9X_decryption предположить, что они либо имеют, либо могут 9X_encryption получить вашу секретную, скрытую соль.
Первое 9X_deciphering правило безопасности - всегда предполагать 9X_passwords и планировать худшее. Следует ли использовать 9X_csharp соль, в идеале случайную соль для каждого 9X_encrypted пользователя? Конечно это определенно 9X_c#.net хорошая практика, и, по крайней мере, она 9X_c-sharp позволяет вам устранение неоднозначности 9X_csharp двух пользователей с одинаковым паролем. Но 9X_password в наши дни одни только соли уже не могут 9X_decrypt спасти вас от человека, готового потратить несколько 9X_encrypt тысяч долларов на оборудование видеокарты, и 9X_c-sharp если вы думаете, что они может, у тебя 9X_encryption проблемы.
- Он хранил это открытым текстом, а вас беспокоит ...
Ответ #3
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Том Скотт правильно описал, как (не) хранить 9X_c-sharp пароли, на Computerphile.
https://www.youtube.com/watch?v=8ZtInClXe1Q
-
Если вы вообще можете этого избежать, не пытайтесь хранить пароли самостоятельно. Вместо этого используйте 9X_decrypt отдельную, предварительно установленную 9X_c#.net и надежную платформу аутентификации пользователей 9X_c-sharp (например, поставщиков OAuth, домен Active 9X_encryption Directory вашей компании и т. д.).
-
Если вам необходимо хранить пароли, не следуйте приведенным здесь инструкциям. По крайней 9X_data-encryption мере, не без ознакомления с более свежими 9X_passwords и авторитетными публикациями, применимыми 9X_encrypt к выбранному вами языку.
Здесь, безусловно, много 9X_data-encryption умных людей, и, возможно, даже есть хорошие 9X_cipher рекомендации. Но велика вероятность, что 9X_decrypt к тому времени, когда вы это прочитаете, все 9X_decrypt ответы здесь (включая этот) уже устарели.
Правильный способ хранения паролей со временем меняется.
Вероятно, чаще, чем некоторые люди меняют нижнее белье.
Все, что 9X_deciphering было сказано, вот некоторые общие рекомендации, которые, надеюсь, останутся 9X_password полезными в течение некоторого времени.
- Не шифруйте пароли. Любой метод хранения, который позволяет восстановить сохраненные данные, по своей сути небезопасен для хранения паролей — включая все формы шифрования.
-
Обрабатывайте пароли точно так, как они были введены пользователем в процессе создания. Все, что 9X_deciphering вы делаете с паролем перед его отправкой 9X_c-sharp в криптографический модуль, скорее всего, только 9X_password ослабит его. Выполнение любого из следующих 9X_encrypt действий также только усложняет процесс 9X_c# хранения и проверки паролей, что может вызвать 9X_visual-c# другие проблемы (возможно, даже создать 9X_password уязвимости) в будущем.
- Не преобразовывать в верхний/нижний регистр.
- Не удаляйте пробелы.
- Не удаляйте недопустимые символы или строки.
- Не меняйте кодировку текста.
- Не делайте замены символов или строк.
- Не усекайте пароли любой длины.
-
Отказ от создания любых паролей, которые нельзя сохранить без изменения. Усиление вышеизложенного. Если 9X_password по какой-то причине ваш механизм хранения 9X_data-encryption паролей не может должным образом обрабатывать 9X_visual-c# определенные символы, пробелы, строки или 9X_c#-language длину пароля, верните ошибку и сообщите 9X_decrypt пользователю об ограничениях системы, чтобы 9X_c-sharp он мог повторить попытку с паролем, который 9X_.cs-file им подходит. Для лучшего взаимодействия 9X_encryption с пользователем заранее сделайте список 9X_deciphering этих ограничений доступным для пользователя. Даже 9X_decrypt не беспокойтесь, не говоря уже о том, чтобы 9X_encrypt скрыть список от злоумышленников — они и 9X_c# так достаточно легко разберутся сами.
- Используйте длинную, случайную и уникальную соль для каждой учетной записи. Пароли двух учетных записей никогда не должны выглядеть одинаково в хранилище, даже если пароли на самом деле идентичны.
- Используйте медленные и криптографически стойкие алгоритмы хеширования, предназначенные для использования с паролями. MD5 определенно не подходит. SHA-1/SHA-2 запрещены. Но я также не собираюсь говорить вам, что вы должны использовать здесь. (См. первый пункт №2 в этом посте.)
- Повторяйте столько, сколько сможете вытерпеть. Хотя у вашей системы могут быть более полезные дела, связанные с циклами процессора, чем хеширование паролей в течение всего дня, у людей, которые будут взламывать ваши пароли, есть системы, которые этого не делают. Сделайте это как можно более жестким для них, но не слишком «жестким» для себя.
Самое 9X_c-sharp главное...
Не слушайте никого здесь.
Найдите авторитетную и самую последнюю 9X_.cs-file публикацию о правильных методах хранения 9X_encryption паролей для выбранного вами языка. На самом 9X_data-encryption деле, вы должны найти несколько недавних 9X_c-sharp публикаций из нескольких разных источников, которые 9X_decryption совпадают, прежде чем остановиться на одном 9X_c-sharp методе.
Крайне возможно, что все, что все 9X_decryption здесь (включая меня) сказали, уже было заменено 9X_cipher лучшими технологиями или сделано небезопасным 9X_visual-c# из-за недавно разработанных методов атаки. Иди 9X_deciphering и найди что-нибудь, чего, скорее всего, нет.
- Хороший ответ, но «Самое главное ... Не слушай никого здесь. Иди поищи авторитетного ...» - эээ, разве ты не принимаешь, для чего создан этот сайт? Сколько книг (возможно) купит и прочи ...
Ответ #4
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Вот что вы хотели бы сделать:
OurKey.SetValue("Password", StringEncryptor.EncryptString(textBoxPassword.Text)); OurKey.GetValue("Password", StringEncryptor.DecryptString(textBoxPassword.Text));
Вы можете сделать 9X_password это с помощью следующих классов. Этот класс 9X_password является универсальным классом и является 9X_encrypted конечной точкой клиента. Он включает IOC 9X_c# различных алгоритмов шифрования с использованием 9X_decrypt Ninject.
public class StringEncryptor { private static IKernel _kernel; static StringEncryptor() { _kernel = new StandardKernel(new EncryptionModule()); } public static string EncryptString(string plainText) { return _kernel.Get().EncryptString(plainText); } public static string DecryptString(string encryptedText) { return _kernel.Get().DecryptString(encryptedText); } }
Следующий класс - это класс ninject, который 9X_c#-language позволяет вводить различные алгоритмы:
public class EncryptionModule : StandardModule { public override void Load() { Bind().To(); } }
Это 9X_c#-language интерфейс, который должен реализовать любой 9X_.cs-file алгоритм для шифрования / дешифрования строк:
public interface IStringEncryptor { string EncryptString(string plainText); string DecryptString(string encryptedText); }
Это 9X_c# реализация с использованием алгоритма TripleDES:
public class TripleDESStringEncryptor : IStringEncryptor { private byte[] _key; private byte[] _iv; private TripleDESCryptoServiceProvider _provider; public TripleDESStringEncryptor() { _key = System.Text.ASCIIEncoding.ASCII.GetBytes("GSYAHAGCBDUUADIADKOPAAAW"); _iv = System.Text.ASCIIEncoding.ASCII.GetBytes("USAZBGAW"); _provider = new TripleDESCryptoServiceProvider(); } #region IStringEncryptor Members public string EncryptString(string plainText) { return Transform(plainText, _provider.CreateEncryptor(_key, _iv)); } public string DecryptString(string encryptedText) { return Transform(encryptedText, _provider.CreateDecryptor(_key, _iv)); } #endregion private string Transform(string text, ICryptoTransform transform) { if (text == null) { return null; } using (MemoryStream stream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(stream, transform, CryptoStreamMode.Write)) { byte[] input = Encoding.Default.GetBytes(text); cryptoStream.Write(input, 0, input.Length); cryptoStream.FlushFinalBlock(); return Encoding.Default.GetString(stream.ToArray()); } } } }
Вы 9X_visual-c# можете посмотреть мое видео и скачать код 9X_.cs-file для этого по адресу: http://www.wrightin.gs/2008/11/how-to-encryptdecrypt-sensitive-column-contents-in-nhibernateactive-record-video.html
- @pst Он демонстрирует, как сделать вашу реализацию подключаемой с помощью любого метода шифрования, вместо того, чтобы рекомендовать какой-либо конкретный мето ...
Ответ #5
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Один из вариантов - сохранить хэш (SHA1, MD5) пароля 9X_decryption вместо пароля в виде открытого текста, и 9X_encrypted всякий раз, когда вы хотите узнать, правильный 9X_c#.net ли пароль, просто сравните его с этим хешем.
Если 9X_visual-c# вам нужно безопасное хранилище (например, для 9X_passwords пароля, который вы будете использовать для 9X_passwords подключения к службе), проблема будет сложнее.
Если 9X_c-sharp это просто для аутентификации, то достаточно 9X_c# использовать хеш.
- SHA1 / MD5 для паролей? Нет, черт возьми, нет.<p> ...
Ответ #6
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Если вы хотите иметь возможность расшифровать 9X_passwords пароль, я думаю, что самым простым способом 9X_csharp было бы использовать DPAPI (режим пользовательского 9X_password хранилища) для шифрования / дешифрования. Таким 9X_csharp образом, вам не придется возиться с ключами 9X_csharp шифрования, хранить их где-то или жестко 9X_deciphering закодировать их в своем коде - в обоих случаях 9X_c-sharp кто-то может обнаружить их, просмотрев реестр, пользовательские 9X_encryption настройки или используя Reflector.
В противном 9X_c# случае используйте хеши SHA1 или MD5, как 9X_visual-c# говорили здесь другие.
- SHA1 и MD5 * не * ...
Ответ #7
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Как сказал ligget78, DPAPI может быть хорошим 9X_decrypt способом хранения паролей. Check out the ProtectedData class on MSDN например использование.
Ответ #8
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Я просмотрел все наглядные примеры процесса 9X_decryption шифрования и дешифрования, но большинство 9X_csharp из них были слишком сложными.
В любом случае 9X_data-encryption есть много причин, по которым кто-то может 9X_data-encryption захотеть расшифровать некоторые текстовые 9X_data-encryption значения, включая пароли. Причина, по которой 9X_decrypt мне нужно расшифровать пароль на сайте, над 9X_data-encryption которым я работаю в настоящее время, заключается 9X_encrypt в том, что они хотят быть уверены, что когда 9X_password кто-то будет вынужден изменить свой пароль 9X_password по истечении срока его действия, мы не позволим 9X_c#.net им изменить его с помощью близкого варианта 9X_decrypt того же пароля. они использовали за последние 9X_visual-c# x месяцев.
Итак, я написал процесс, который 9X_c#.net будет делать это в упрощенной форме. Надеюсь, этот 9X_data-encryption код кому-то будет полезен. Насколько я знаю, я 9X_encryption могу использовать это в другое время для 9X_encryption другой компании / сайта.
public string GenerateAPassKey(string passphrase) { // Pass Phrase can be any string string passPhrase = passphrase; // Salt Value can be any string(for simplicity use the same value as used for the pass phrase) string saltValue = passphrase; // Hash Algorithm can be "SHA1 or MD5" string hashAlgorithm = "SHA1"; // Password Iterations can be any number int passwordIterations = 2; // Key Size can be 128,192 or 256 int keySize = 256; // Convert Salt passphrase string to a Byte Array byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue); // Using System.Security.Cryptography.PasswordDeriveBytes to create the Key PasswordDeriveBytes pdb = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations); //When creating a Key Byte array from the base64 string the Key must have 32 dimensions. byte[] Key = pdb.GetBytes(keySize / 11); String KeyString = Convert.ToBase64String(Key); return KeyString; } //Save the keystring some place like your database and use it to decrypt and encrypt //any text string or text file etc. Make sure you dont lose it though. private static string Encrypt(string plainStr, string KeyString) { RijndaelManaged aesEncryption = new RijndaelManaged(); aesEncryption.KeySize = 256; aesEncryption.BlockSize = 128; aesEncryption.Mode = CipherMode.ECB; aesEncryption.Padding = PaddingMode.ISO10126; byte[] KeyInBytes = Encoding.UTF8.GetBytes(KeyString); aesEncryption.Key = KeyInBytes; byte[] plainText = ASCIIEncoding.UTF8.GetBytes(plainStr); ICryptoTransform crypto = aesEncryption.CreateEncryptor(); byte[] cipherText = crypto.TransformFinalBlock(plainText, 0, plainText.Length); return Convert.ToBase64String(cipherText); } private static string Decrypt(string encryptedText, string KeyString) { RijndaelManaged aesEncryption = new RijndaelManaged(); aesEncryption.KeySize = 256; aesEncryption.BlockSize = 128; aesEncryption.Mode = CipherMode.ECB; aesEncryption.Padding = PaddingMode.ISO10126; byte[] KeyInBytes = Encoding.UTF8.GetBytes(KeyString); aesEncryption.Key = KeyInBytes; ICryptoTransform decrypto = aesEncryption.CreateDecryptor(); byte[] encryptedBytes = Convert.FromBase64CharArray(encryptedText.ToCharArray(), 0, encryptedText.Length); return ASCIIEncoding.UTF8.GetString(decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length)); } String KeyString = GenerateAPassKey("PassKey"); String EncryptedPassword = Encrypt("25Characterlengthpassword!", KeyString); String DecryptedPassword = Decrypt(EncryptedPassword, KeyString);
Ответ #9
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Если это пароль, используемый для аутентификации 9X_data-encryption в вашем приложении, хешируйте пароль, как 9X_visual-c# предлагают другие.
Если вы храните пароли 9X_csharp для внешнего ресурса, вам часто нужно иметь 9X_c#-language возможность запрашивать у пользователя эти 9X_csharp учетные данные и давать ему возможность 9X_encrypted безопасно сохранить их. Windows предоставляет 9X_deciphering для этой цели пользовательский интерфейс 9X_c#.net учетных данных (CredUI) - существует ряд 9X_encryption примеров, показывающих, как использовать 9X_cipher это в .NET, включая this one on MSDN.
Ответ #10
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
..NET предоставляет службы криптографии 9X_encrypt в классе, содержащемся в System.Security.Cryptography 9X_csharp пространство имен.
- Этот ответ настолько широк, что бесполезен. Выбор правильной криптовалюты и ее правильна ...
Ответ #11
Ответ на вопрос: Как проще всего зашифровать пароль при сохранении его в реестре?
Если вам нужно нечто большее, например, защита 9X_deciphering строки подключения (для подключения к базе 9X_c#.net данных), отметьте этот article, так как он предоставляет 9X_decrypt лучший «вариант» для этого.
Ответ Оли тоже 9X_encrypt хорош, поскольку он показывает, как можно 9X_decryption создать хеш для строки.
-
13
-
9
-
6
-
1
-
8
-
7
-
5
-
7
-
17
-
5
-
2
-
8
-
3
-
1
-
1
-
4
-
3
-
4
-
2
-
2
-
1
-
3
-
8
-
3
-
13
-
10
-
2
-
19
-
9
-
13
-
6
-
15
-
10
-
6
-
3
-
9
-
1
-
3
-
5
-
7
-
2
-
4
-
21
-
2
-
11
-
40
-
7
-
8
-
4
-
15