私はセキュリティの専門家ではなく、ほとんどのアプリがローカルイントラネットで実行されているため、セキュリティについてあまり考えていません。:)
しかし、実際には、私はそれを正しくしようとしています。
GlassfishにJDBCレルムを設定し、インターネットからのこのコードを使用してMD5ハッシュでパスワードを保存しています。
public static String getMD5(String input)
{
try
{
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(input.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++)
{
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100,
16).substring(1));
}
return sb.toString();
}
catch (NoSuchAlgorithmException e)
{
throw new RuntimeException(e);
}
}
今私の質問は、パスワードの変更のユースケース中に...入力されたパスワードが以下のコードのように私のDBにあるものと同じであるかどうかを検証するためにハッシュが等しいかどうかを比較するだけですか?
public static void main(String[] args)
throws NoSuchAlgorithmException
{
String currentPassword = "java";
String inputValue = "java1";
String string1 = getMD5(currentPassword);
String string2 = getMD5(inputValue);
System.out.println("Is equal = " + string1.equals(string2));
}
MD5は一方向のハッシュであるため、パスワードを文字列に復号化できないことをどこかで読んだことがありますか?
申し訳ありませんが、私の質問が単純すぎる場合でも、理解を確認したいのですが。
ありがとう