ユーザー登録で MD5 を使用してパスワードを暗号化し、ログイン時に同じパスワードを照合しようとしています.Mysql をデータベースとして使用しています.Mysql も、パスワードを MD5 (つまり MD5(パスワード)) に変換するオプションを提供しています。それを暗号化するためのより良い方法はどれか知りたい..それはJavaコードまたはmysqlクエリを使用しています..
前もって感謝します。
パスワードを保存しないでください。ディスク上にある場合、盗まれる可能性があります。代わりに、パスワード ハッシュを保存します。SHA256、BCrypt、ハッシュのソルトなど、正しいハッシュアルゴリズムを使用してください。
ここにあなたが見なければならないいくつかの便利なリンクがあります:
お役に立てれば。
MD5 で暗号化するために使用するアルゴリズムは次のとおりです。暗号化された出力が返されます。
public class CryptWithMD5 {
private static MessageDigest md;
public static String cryptWithMD5(String pass){
try {
md = MessageDigest.getInstance("MD5");
byte[] passBytes = pass.getBytes();
md.reset();
byte[] digested = md.digest(passBytes);
StringBuffer sb = new StringBuffer();
for(int i=0;i<digested.length;i++){
sb.append(Integer.toHexString(0xff & digested[i]));
}
return sb.toString();
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(CryptWithMD5.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
MD5 を復号化することはできませんが、このメソッドに同じ文字列を入力すると、同じ暗号化された出力が返されるため、出力を比較できます。復号化する場合は、SHA を使用する必要があります。そのためには常にMD5を使用します。その例外はかなり冗長です。決してスローしません。パスワードをデータベースに追加するときは、このメソッドが返すものを追加します。ログインするには、それらを比較します。
論理的には、アプリケーションとデータベースは 2 つの別々の物理ボックスに存在できるため、アプリケーション レイヤーでパスワードを暗号化してからデータベースに移動すると、より安全なオプションになります。
アプリケーション設計の観点からは、暗号化を検討し、パスワードを非常に早い段階でハッシュして、レイヤーからレイヤーへとパスワードがプレーンな文字列として移動しないようにする必要があります。
オフトピック:
MD5 は衝突攻撃を受けやすいため、電子メールの追加や動的に生成された値のようなソルトの使用を検討して、 Rainbow Tableを防止します。