MessageDigest を使用して MD5 サムを生成しようとしています。そして、私は次のコードを持っています。
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
output = bigInt.toString(16);
これは 32 文字の文字列ではなく、31 文字の文字列を返します8611c0b0832bce5a19ceee626a403a7
期待される文字列は08611c0b0832bce5a19ceee626a403a7
出力に先頭の 0 がありません。
別の方法を試してみました
byte[] md5sum = digest.digest();
output = new String(Hex.encodeHex(md5sum));
そして、出力は期待どおりです。
私はドキュメントをチェックし、Integer.toStringはそれに応じて変換を行います
Character.forDigit によって提供される数字から文字へのマッピングが使用され、必要に応じてマイナス記号が先頭に追加されます。
および Character.forDigit メソッドで
0 <=digit < 基数の場合、数字の引数は有効です。
2 つの方法の違いと、先頭の 0 が削除される理由を教えてください。