Я пытаюсь сгенерировать сумму 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
Аргумент digit действителен, если 0 ‹=цифра ‹ основание.
Может ли кто-нибудь сказать мне, чем отличаются два метода и почему удаляется ведущий 0?
BigInteger.toString()
должен выводить начальный ноль? - person Gabe   schedule 23.04.2012toString
должен знать, что вы ожидаете начальный 0?BigInteger
хранит только число; он не знает, сколько начальных нулей вы ожидаете. - person Gabe   schedule 23.04.2012new BigInteger("27").toString()
? Сколько лидирующих нулей? - person yshavit   schedule 23.04.2012