Сравнение зашифрованных паролей в базе данных и пользовательский ввод с Encrypto - PullRequest
0 голосов
/ 24 февраля 2012

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

и я использую Encrypto прямо в этом коде?

var hasher = new Hasher();

hasher.SaltSize = 16;

//Encrypts The password
var encryptedPassword = hasher.Encrypt(txtPass.Text);

Account newUser = new Account();

System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();

newUser.accnt_User = txtUser.Text;
newUser.accnt_Position = txtPosition.Text;
newUser.accnt_Pass = new System.Data.Linq.Binary(encoding.GetBytes(encryptedPassword));

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

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

В codeplex посмотрите исходный код для Hasher.cs , чтобы увидеть, как они это делают. Они в основном используют соль для создания хэша, а затем добавляют соль в конец хэша. это то, что вы храните в БД.

Когда пользователь устанавливает свой пароль или регистрируется новый пользователь, вы хэшируете пароль и сохраняете его в БД

var hasher = new Hasher();
hasher.SaltSize = 16;
var hashedPasswordToStoreInDB = hasher.Encrypt(passwordToSet);

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

var hasher = new Hasher();
hasher.SaltSize = 16;
bool areEqual = hasher.CompareStringToHash(enteredPassword, hashFromDatabase);

Опять же, если вы посмотрите на исходный код (Hasher.CompareStringToHash), вы увидите, что случайная соль восстанавливается из сохраненного хеша и затем используется для вычисления нового хеша из введенного пароля.

0 голосов
/ 25 февраля 2012

Я не знаю о Encrypto специально, но общий принцип таков: вы «солите» пароль, затем шифруете его и сохраняете в базе данных. Когда кто-то входит в систему, вы делаете то же самое: соль, шифрование, а затем сравниваете его с другим хешем, хранящимся в базе данных.

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

Опять же, я не знаю Encrypto, но просто использую ту же логику, которую вы использовали для создания хэша в базе данных, когда вы хотите сравнить с вводимым пользователем паролем.

...