当我使用java加密md5中的某些内容时,它会删除哈希中的所有0,这对我来说不行,因为它不能用于php,因为php不会删除0。有没有办法解决它(除了使php删除0s)。这是我的java代码:
public String getMd5Hash(String str) {
try {
byte[] array = MessageDigest.getInstance("MD5").digest(str.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("Something went really wrong.");
}
return null;
}
答案 0 :(得分:1)
Integer.toHexString不会将零添加到您隐含所需的长度。使用带有“%02x”格式字符串的java.util.Formatter类将十六进制数字转换为您想要的格式。
以下代码演示了此问题。
import java.util.Formatter;
public class TestHex {
public static final void main(String[] args) {
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
byte[] testbytes = {-127, 4, 64, -4};
for (int i=0; i<testbytes.length; i++) {
byte b = testbytes[i];
System.out.printf("%s\t%s\n", formatter.format("%02x", b), Integer.toHexString(b & 0xff));
sb.setLength(0);
}
}
}
运行时,会产生:
81 81
04 4
40 40
fc fc
注意第二行,其中Integer.toHexString只返回'4',格式化程序为您提供所需的两位数字。