2012-02-24 9 views
0

ユーザーのデータベースから挿入した暗号化されたパスワードを比較するにはどうすればよいですか?自分のプログラムをテストしているときに、同じパスワードを持っていても暗号化が異なるアカウントを作成したことに気付きました。ユーザーの入力がデータベースの入力と同じであるかどうかはどのようにわかりますか? 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)); 
+0

あなたは何をしますか?あなたが使用している暗号化の種類を指定した場所がわかりません。そうするためにキーと塩を生成するだけではなく、パスワードの暗号化が安全でないことを理解していますか? –

+0

私はこれを使用しています。http://encrypto.codeplex.com/ – KyelJmD

+0

http://thecodemechanic.wordpress.com/2011/06/07/introduction-to-strong-cryptography-p1-0-hash- functions-us-patriots/ –

答えて

2

2つの同一のパスワードを使用すると、異なるハッシュが発生する可能性があります。これは、Encryptoがハッシュする前にランダムなソルトをパスワードの末尾に追加するためです。

オンデコードコード:source code for Hasher.csをご覧ください。彼らは基本的にハッシュを行うために塩を使い、ハッシュの最後に塩を加えます。これはあなたがDBに保存するものです。

ユーザーが自分のパスワードまたは新規ユーザー登録を設定すると、パスワードをハッシュし

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

その後、彼らはあなたがユーザーというパスワードを比較してログインし、パスワードを入力したときにDBに格納しますここでも、この

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

のようにDBから取得し、以前にハッシュ化されたバージョンの種類、あなたlook at the source codeHasher.CompareStringToHash)あなたは、ランダムな塩は保存されたハッシュから回収した後から、新しいハッシュを計算するために使用されていることがわかります場合入力したパスワード。

+0

私はこれを行う場合たとえばvar encryptedPassword = hasher.Encrypt(passwodfield.Text);私はvar enryptedPasswordをデータベースに入れますか?それから私がログインしたい場合は、それを取得して、次にboolを使用します。areEqual = hasher.CompareStringToHash(enterePassword、queryResult)? – KyelJmD

+0

はい。私は私の答えをこれでもっと明確に編集しました。 –

0

は私が特別にEncryptoについて知らないが、一般的な原則はこれです:あなたは「塩」、パスワード、それを暗号化し、それをデータベースに格納します。誰かがログインすると、同じことをやり直します:salt、暗号化し、データベースに保存されている他のハッシュと比較します。

2つの同一のパスワードが異なるハッシュをもたらす理由は、塩です。暗号化する前にパスワードを変更するので、ハッシュを見るだけではハッシュメカニズムを理解するのが難しくなります。 saltは、常に同じ(セキュリティが貧弱)、ユーザー名の機能、またはデータベースに暗号化されたパスワードとともに格納されている別のランダムな文字列の関数とすることができます。

Encryptoについてはわかりませんが、ユーザー入力パスワードと比較する場合は、データベースでハッシュを生成するのと同じロジックを使用してください。

関連する問題