String を取り込んで MD5 アルゴリズムでハッシュする単純なメソッドがあります (言うまでもなく、これらsysos
はすべて、私が経験した奇妙な動作を監視/デバッグするためのものです):
private String hashMD5(String input) throws UnsupportedEncodingException, NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("MD5");
// BYTES_ENCODING == "UTF-8"
digest.update(input.getBytes(BYTES_ENCODING), 0, input.length());
System.out.println(new BigInteger(1, digest.digest()).toString(16));
System.out.println(new BigInteger(1, digest.digest()).toString(16));
System.out.println(new BigInteger(1, digest.digest()).toString(16));
String hash = new BigInteger(1, digest.digest()).toString(16);
System.out.println(hash + " : used hash");
System.out.println(hash.length() + " - " + new BigInteger(1, digest.digest()).toString(16).length());
return hash;
}
セット文字列でこのメソッドを呼び出すと、次のようになります。
02-18 08:49:23.355: I/System.out(2753): 78bfa0ce6d53a698a98aac899562bb4
02-18 08:49:23.355: I/System.out(2753): d41d8cd98f00b204e9800998ecf8427e
02-18 08:49:23.355: I/System.out(2753): d41d8cd98f00b204e9800998ecf8427e
02-18 08:49:23.355: I/System.out(2753): d41d8cd98f00b204e9800998ecf8427e : used hash
02-18 08:49:23.355: I/System.out(2753): 32 - 32
ですから皆さんへの私の質問は次のとおりです。
最初BigInteger
のものは他のすべてのものと(長さと内容が)異なるのはなぜですか?
BigInteger
両方のテスト デバイスで同じ動作が発生しています。適切な長さのハッシュを取得するには、少なくとも 2 つを作成する必要があります。
- ネクサス S (Android 4.1.1)
- ネクサス 7 (アンドロイド 4.2.2)