简单字符串MD5加密
1.MessageDigest.getInstance("MD5").digest("需要加密的字符".getBytes()) 计算出来的结果返回的byte[]长度始终为16位。
2.要记住我们计算出来的md5(32位)最后都都是固定长度32的字符串
* byte有8位,假如全部都是 11111111 那么对应的int(10进制)类型就是 255
* 虽然255(十进制)和11111111(二进制)都表示同一个数,但作为String类型存储255作为String类型存储长度为3,而11111111作为string类型存储长度为8
3.将byte[16]全部转换为正数的16进制字符串刚好是32位。
4.那么在byte[16]转换为16进制的固定长度32的字符串。并不是为了什么,就是为了保证我们可以直观看到的密文都是固定长度的。
public static String stringToMD5(String string) {
try {
byte[] hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
hex.append((b & 0xFF) < 0x10 ? "0" + Integer.toHexString(b & 0xFF) : Integer.toHexString(b & 0xFF));
}
return hex.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这个的做法就是想让结果变成16进制,每两个字符代表一个字节。小于0x10(16)的时候,比如a,这样就要在它前面加个0:0a,
如果不小于0x10,比如1a,这样就是两位了,不用加0。