次のコードを使用してアプリケーションの MD5 ハッシュを生成し、文字列値をエンコードしてから、この生成されたハッシュを Web サービスを介して .Net コードに送信します。そのコードは MD5 ハッシュを読み取り、文字列の MD5 を生成します。 DBから取得して比較する
public static String getMD5Hash(String val) throws Exception {
byte[] bytes = val.getBytes();
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] digest = m.digest(bytes);
String hash = new BigInteger(1, digest).toString(16);
System.out.println(hash.length());
return hash;
}
public static void main(String[] asd) throws Exception{
for(int i=0;i<10;i++){
System.out.println(getMD5Hash(i+Math.pow(10, i)+""));//for testing
System.out.println(getMD5Hash(i+""));//for testing
}
}
問題は、BigInteger から変換されたハッシュを取得していて、生成されたハッシュが 0 で始まる場合があるためです。このように、文字列比較は false を返します。たとえば、ハッシュ コードを生成して送信する " 102678D1922799CF9122B3F103975F1
" ここで、.Net ハッシュは " 0102678D1922799CF9122B3F103975F1
"です。
また、次のようなコードを生成する場合もあります
.Net generates 0012678D1922799CF9122B3F103975F1 and java 12678D1922799CF9122B3F103975F1
また
0002678D1922799CF9122B3F103975F1 and 2678D1922799CF9122B3F103975F1
先頭がすべて 0 のこのコードを取得するにはどうすればよいですか。前もって感謝します。