6

パスワードを暗号化してデータベースに挿入し、比較後に接続したい場合はどうすればよいですか?

StandardPasswordEncoder Spring security 3.1.4 を使用してパスワードを暗号化し、データベースに挿入します。しかし、この方法で生成された塩をどのように回収するのでしょうか?

doc Spring セキュリティの例を次に示します。

StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");
assertTrue(encoder.matches("myPassword", result));

比較のためにパスワードを再エンコードするために選択順序が必要なので、私は彼女に尋ねましたか? ユーザーが正しいパスワードを入力する必要があるかどうかを検証しますか?

ここでパスワードのエンコーディング: 9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f 新しいパスワードのエンコードを比較します。

Link Doc Spring : http://docs.spring.io/spring-security/site/docs/3.1.4.RELEASE/reference/crypto.html Link API SPring security 3.1.4 : http://docs.spring.io /spring-security/site/docs/3.1.4.RELEASE/apidocs/

4

2 に答える 2

7

私はあなたがそれがどのように機能するかを尋ねていると思いますか?? 答えはかなり単純です。StandardPasswordEncoder.matches()使用したい方法です。バックグラウンドでStandardPasswordEncoder、ハッシュ化されたパスワードをデコードし、結果のバイト配列からソルトを抽出します。次に、そのソルトを使用して、渡されたプレーンテキストのパスワードをハッシュします。結果のハッシュが元のハッシュと一致する場合、パスワードは一致します! 背後にある詳細については、ソースを参照してくださいStandardPasswordEncoder.matches()

public boolean matches(CharSequence rawPassword, String encodedPassword) {
    byte[] digested = decode(encodedPassword);
    byte[] salt = subArray(digested, 0, saltGenerator.getKeyLength());
    return matches(digested, digest(rawPassword, salt));
}
于 2013-10-20T23:07:14.127 に答える
2

保存されたパスワードを人間が読める形式に分解することはできません。

myPassword ="9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f"daabase で pesent を仮定します。

あなたはこのようにすることができます

StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");

now your result is equal to `9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f` 

String passworddb = getPasswordFromDB();

passworddb from daabase is `9e7e3a73a40871d4b489adb746c31ace280d28206dded9665bac40eabfe6ffdc32a8c5c416b5878f`

assertTrue(encoder.matches(passworddb, result)); then passworddb and result are equal.
于 2013-10-20T15:25:43.710 に答える