MD5 因为其不可逆的特性, 让它成为现今许多工程师常用的加密方式之一
尤其在这隐私权高涨的年代, 所有个资, 卡号, 交易金流相关都会用到加密
来看个简单的範例
public static void main(String[] args){ String str = "helloJava"; //要加密的字串 char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); messageDigest.update(str.getBytes("UTF-8")); //Hash计算, 产生128位的长整数 byte[] bytes = messageDigest.digest(); StringBuffer sb = new StringBuffer(bytes.length * 2); for(Byte b : bytes){ //右移四位, 取字节中前四位转换 sb.append(hexDigits[(b >> 4) & 0x0f]); //取字节中后四位转换 sb.append(hexDigits[b & 0x0f]); } //输出 602965cf9dd0e80ca28269257a6aba87 System.out.println(sb.toString()); } catch (Exception e) { e.printStackTrace(); } }
网路上有看到MD5有分32位元跟16位元, 是什么意思呢?
其实MD5的长度原生为128bit, 也就是128个0跟1组合
但这样的方式不易阅读, 所以我们会转成16进制, 每4个bit表示1个16进制
所以 128/4 = 32, 就变32位元了, 这也是大部分人用的方法。
那16位元是怎么来的?
16位元是去掉前8位, 后8位得到的, 所以16位元的数值会跟32位元的中间部分一样。
MD5 32位元 = 602965cf9dd0e80ca28269257a6aba87MD5 16位元 = 9dd0e80ca2826925