私はMessageDigest.digest()
メソッドを呼び出してパスワードのハッシュを取得しています。 パスワードにノルウェー語の文字が含まれている場合。 'ø'
の場合、このメソッドは最後の文字が異なる別の文字列に対して同じハッシュを返します。 "Høstname1"
と"Høstname2"
のハッシュ値は同じですが、"Hostnøme1"
のハッシュ値は'ø'
と異なる場合があります。これは "utf-8"エンコーディングです。 "iso-8859-1"エンコーディングの場合、この問題は表示されません。これは既知の問題ですか、私はここで何かを逃していますか?ノルウェー文字を持つ異なる文字列に対して同じハッシュを返すMessageDigest.digest()
これは私のコードです:
import java.security.MessageDigest;
String password = "Høstname1";
String salt = "6";
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] hash = new byte[40];
messageDigest.update(salt.getBytes("utf-8"), 0, salt.length());
messageDigest.update(password.getBytes("utf-8"), 0, password.length());
hash = messageDigest.digest();
ちょっと推測しますが、ソースファイルのエンコーディングとコンパイラのエンコーディングセットとは何か関係があります。 –