Зашифровать пароль C # - PullRequest
       3

Зашифровать пароль C #

2 голосов
/ 05 августа 2010

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

Симметричные и асимметричные криптосистемы: открытый и закрытый ключи, цифровые подписи, алгоритмы хеширования, RSA, DES, Rijndael, PGP, MD5, SHA-1, https, защищенные сокеты, Camellia, IDEA; Что все это значит?

Я даже не знаю разницу между MD5 и rinjdael, может ли somenone подсказать мне лучший вариант шифрования?

Ответы [ 8 ]

11 голосов
/ 06 августа 2010

Если вы используете asp.net, вы можете использовать встроенные функции учетной записи пользователя.

Если вы настаиваете на создании собственного, вы не должны шифровать, вы должны хешировать и хранить ТОЛЬКО хеш, а не реальный пароль.

Вот ссылка , с которой можно начать.

обновление комментариев
поставщики членства для MySql
поставщики членства для Oracle

3 голосов
/ 06 августа 2010

Какой самый простой способ зашифровать пароль при его сохранении в реестре?

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

1 голос
/ 06 августа 2010

Вот действительно хорошая статья , которую я использовал, когда впервые учился хранить пароли.Это действительно хороший учебник, и он написан на C #

1 голос
/ 06 августа 2010

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

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

Если вы гуглите соли, радужные таблицы, хэши и т. Д., Там будет масса информации.

1 голос
/ 06 августа 2010

Если вы хотите хранить пароли, например, в базе данных, я бы порекомендовал вам использовать HMAC (код аутентификации сообщений на основе хеша);вам понадобится криптографическая хеш-функция (например, SHA-512) в сочетании с секретным ключом для генерации MAC.Кроме того, важно отметить, что вы не шифруете пароль, а предпочитаете хеш его.

Например, для шифрования локально сохраненных паролей (хотя Брюс Шнайерговорит, что вы должны записать свои пароли на бумаге ), вы можете использовать криптосистему с асимметричным ключом, такую ​​как RSA .В этом случае у вас будет пара ключей, состоящая из открытого ключа, которым вы поделитесь с друзьями, и личного ключа, который вы должны, в общем-то, сохранить в секрете.Хорошая вещь в RSA состоит в том, что вы можете либо зашифровать сообщения с помощью вашего открытого ключа, а затем расшифровать их с помощью вашего личного ключа;или вы можете использовать его для цифровой подписи документов, используя свой закрытый ключ, чтобы вычислить хэш документа, а затем проверить его, используя ваш открытый ключ.Довольно изящно!

0 голосов
/ 24 сентября 2016

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

private string Encrypt(string clearText)
{
    string EncryptionKey = "MAKV2SPBNI99212";
    byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
    using (Aes encryptor = Aes.Create())
    {
        Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        encryptor.Key = pdb.GetBytes(32);
        encryptor.IV = pdb.GetBytes(16);
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(clearBytes, 0, clearBytes.Length);
                cs.Close();
            }
            clearText = Convert.ToBase64String(ms.ToArray());
        }
    }
    return clearText;
}
0 голосов
/ 06 августа 2010

На этот вопрос уже был дан ответ, но короткая версия состоит в том, что вы солите пароль, хешируете его по крайней мере с SHA-256 и предпочтительно используете усиление. Если это не имеет смысла для вас, вы еще не готовы что-либо писать; продолжайте исследования.

0 голосов
/ 06 августа 2010

Я думаю, что вы могли бы использовать MD5, это просто реализовать в .Net и это 128-битная (односторонняя) криптографическая хеш-функция.У него проблемы с хеш-обработкой в ​​широких диапазонах.

Или вы можете проверить в Gost, что это 256-битная криптографическая хеш-функция.

ГОСТ Хеш-функция

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