Я пытаюсь генерировать сумму 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 выполнил преобразование в соответствии с ним
Отображение цифр в символ, предоставляемое Character.forDigit, равно и знак минус добавляется, если это необходимо.
и в Character.forDigit methos
Аргумент цифр действителен, если 0 <= digit < радикс.
Может ли кто-нибудь сказать мне, как два метода отличаются друг от друга и почему вывод 0 удален?