パスワードの暗号化泉/Hibernate-Jasyptは何か?[定休日]
-
21-08-2019 - |
質問
にJavaアプリケーションのスタックとSpring&Hibernate(JPA)のデータアクセスの層は何か良い方法を適用するパスワードを暗号化(とアノテーションを用)、できるだけ詳細についてできるのではないかと考えてそれぞれについて、"これまでのチュートリアル等)?
で理解されてい使用 JCA 対応アルゴリズムの暗号化、パスワードは、好な実施のためのラッパーロジックがあれば簡単です。
んでJasyptた)いも決して悪くはないのですがオプションというのでびとがどのような他の人が使っている。ればどなたでも利用Jasyptまたは代替の詳細をご体験できます。
他のヒント
あなたは Jasyptを使用することができますあなたが探しています。あなたにも独自のロールしたい場合は、コンピューティングダイジェスト(ハッシュ)の実際のアルゴリズムは、JCEを使用して非常に単純です。
MD5またはSHA-256は、罰金になります。
たぶん私は問題を誤解し、それだけでハッシュされたパスワードを比較する必要があります。
休止状態では、単なる文字列として保存します。
:検証側では、などの方法がありますpublic validate(String user, String pass)
{
if(getUser(user).getPass().equals(getHash(pass)))
return true;
return false;
}
がありJasyptでそれを行うにはHibernate固有の方法ではないようですが、あなたは春にパスワードの暗号化を設定することができます:
<!--
Set up string digester here so we can configure it for more pools if it's a problem...
-->
<bean id="stringDigester" class="org.jasypt.digest.PooledStringDigester">
<!-- same settings as StrongPasswordGenerator -->
<property name="poolSize" value="2"/>
<property name="algorithm" value="SHA-256"/>
<property name="iterations" value="100000"/>
<property name="saltGenerator">
<bean class="org.jasypt.salt.RandomSaltGenerator"/>
</property>
<property name="saltSizeBytes" value="16"/>
</bean>
<!-- ...and then we only have to deal with the passwordEncryptor interface in code. -->
<bean id="passwordEncryptor" class="com.myproject.util.StringPasswordEncryptor">
<property name="stringDigester" ref="stringDigester"/>
</bean>
その後、あなたは)暗号化を取得し、次にてencryptPassword()またはcheckpasswordを(いずれかを呼び出すためにcontext.getBean( "passwordEncryptor")を呼び出します。
あなたは、あなたがまた春のセキュリティを使用することができ、あなたのアプリケーションで春を使用している場合は、いくつかのパスワードのエンコーダをご提供する、すなわち<のhref = "http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/authentication/encoding/ShaPasswordEncoder。 HTML」のrel = "nofollowをnoreferrer"> ShaPasswordEncoderする あなたは StackOverflowのの
でそれを見つけることができます私はちょうどSHA-256(username + ":" + password + ":" + salt)
とpasswdと呼ばれる64文字列にデータベースに保管するために同様のものを使用します。
ウィキペディアは塩に関連し、言う:「ソルトデータ辞書エントリの事前暗号化を使用して、辞書攻撃を複雑にする:使用する塩の各ビットは、必要なストレージと計算量を倍に...最高のセキュリティを強化するために、塩の価値はありますデータベースが盗まれたとき、これは利点を提供していますが、塩ではありません。パスワードデータベースとは別の、秘密にしておく。」
それでは彼らのログイン試行を経由して提供されたパスワードを使用して同じハッシュを生成し、提供されたユーザ名と、データベースからユーザーを取得し、認証、およびデータベースのものに比較することができます。また、ログイン試行(例えば、5につき5分間)のために制限いくつかの速度で加えます。ユーザーがパスワードを忘れた場合、パスワード(あなたはそれが保存されていないので)、それらを電子メールで送信しない、また彼らに新しい生成されたパスワードを電子メールが、それらに変更パスワードキー/ナンス/塩とそのパスワードを変更するためのリンクを電子メールで送信NEVERあなたが反対確認することができURLます。