Javaで特定のパスワードからハッシュを作成し、それをMySQLデータベースに保存しています。データベースにソルトを保存することについてはよく読んだことがありますが、ここに記載しないことを選択した理由がいくつかあります。各ユーザーに固有のランダム ソルトをハッカーから完全に隠す方法はないようです。ホストされたデータベースとダウンロード可能なソフトウェアがあることを隠す方法もありません。このソフトウェアは社内でのみ使用されるため、ユーザー数は最大 20 人であり、ハッカーはソフトウェアよりもデータベース ポートに出くわす可能性がはるかに高くなります。少なくとも、ソルトをデータベースに保存するのではなく、ソフトウェアで生成することにより、ソルト/ハッシュ方式を逆コンパイルして決定するソフトウェアを見つける必要があります。
私が使用している方法は次のとおりです。
public static byte[] getHash(String password) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] passBytes = password.getBytes();
byte[] salt = digest.digest(passBytes);
byte[] digestable = new byte[passBytes.length + salt.length];
System.arraycopy(passBytes, 0, digestable, 0, passBytes.length);
System.arraycopy(salt, 0, digestable, passBytes.length, salt.length);
return digest.digest(digestable);
}
編集: これをここに置くための大統領
ランダムなソルトを生成する必要があることがわかりました。これで保存できます。