Я пытаюсь сгенерировать сумму MD5, используя MessageDigest. И у меня есть следующий код.
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 делает преобразование в соответствии с ним
The digit-to-character mapping provided by Character.forDigit is used, and a minus sign is prepended if appropriate.
и в методе Character.forDigit
The digit argument is valid if 0 <=digit < radix.
Может ли кто-нибудь сказать мне, чем отличаются два метода и почему удаляется ведущий 0?