我正在尝试使用MessageDigest生成MD5总和.我有以下代码.
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
output = bigInt.toString(16);
Run Code Online (Sandbox Code Playgroud)
这不返回32个字符串,而是返回31个字符的字符串 8611c0b0832bce5a19ceee626a403a7
期望的字符串是 08611c0b0832bce5a19ceee626a403a7
输出中缺少前导0.
我尝试了另一种方法
byte[] md5sum = digest.digest();
output = new String(Hex.encodeHex(md5sum));
Run Code Online (Sandbox Code Playgroud)
输出正如预期的那样.
我检查了doc并且Integer.toString根据它进行了转换
使用Character.forDigit提供的数字到字符映射,如果合适,前缀为减号.
并在Character.forDigit方法
如果0 <= digit <radix,则数字参数有效.
有人可以告诉我两种方法有何不同以及为什么删除前导0?