Шифровать и дешифровать пароли с помощью C # - PullRequest
1 голос
/ 16 декабря 2010

Я хочу создать приложение, которое может шифровать и дешифровать мои пароли с помощью C #.

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

Насколько сложно кому-то расшифровать мой сгенерированный пароль?

Я ищу предложения или пример кода.

Ответы [ 4 ]

8 голосов
/ 16 декабря 2010

В .NET существует множество безопасных способов шифрования. Я думаю, что вместо того, чтобы пытаться реализовать собственное решение, вам лучше взглянуть на System.Security.Cryptography .

7 голосов
/ 16 декабря 2010

Цезарь Цифер ​​ общеизвестно небезопасно.Отказаться от этого метода как бесплодного.Сделайте больше исследований по защите паролем.

2 голосов
/ 16 декабря 2010

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

Преимущество этого подхода заключается в том, что никто не может определить, какой пароль у пользователя, даже если он или она получает доступ к базе данных. И соль заставляет идентичные пароли казаться отличными друг от друга.

Ниже приведен пример создания случайной соли с использованием пространства имен System.Security.Cryptography.

byte[] salt = new byte[10];
RandomNumberGenerator.Create().GetBytes(salt);

Вы можете объединить соль с паролем и сгенерировать односторонний хеш следующим образом:

byte[]  passwordBytes = new byte[Encoding.UTF8.GetByteCount(password) + salt.Length];  // Create buffer for password bytes and hash
int passwordLength = Encoding.UTF8.GetBytes(password, 0, password.Length, passwordBytes, 0);
salt.CopyTo(passwordBytes, passwordLength);
byte[] hash = null;
using (SHA512Managed hasher = new SHA512Managed()) {
  hash = hasher.ComputeHash(passwordBytes);
}

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

2 голосов
/ 16 декабря 2010

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

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