在使用MD5加密時,生成的密文長度只有31位,該怎么解決?代碼如下:public static String toMd5(String str) { String re = null; byte encrypt[]; try { byte[] tem = str.getBytes(); MessageDigest md5 = MessageDigest.getInstance("md5"); md5.reset(); md5.update(tem); encrypt = md5.digest(); StringBuilder sb = new StringBuilder(); for (byte t : encrypt) { sb.append(Integer.toHexString(t & 0xFF)); } re = sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return re; }比如加密admin,結(jié)果如圖:正常的32位加密結(jié)果為:21232f297a57a5a743894a0e4a801fc3而我的代碼加密結(jié)果為:21232f297a57a5a743894ae4a801fc3正常的第23位的“0”不見了,求問大神產(chǎn)生的原因是什么?該如何解決?
1 回答

繁華開滿天機
TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
問題出在這一句:Integer.toHexString(t & 0xFF)
當(dāng)t為14時,十六進(jìn)制就是0e,轉(zhuǎn)化成字符串會忽略掉前導(dǎo)零。
改一下就行了:
String s = Integer.toHexString(t & 0xFF);
if (s.length() == 1) {
s = "0" + s;
}
另外,md5不是一種加密算法,是計算消息摘要的,可以用來作數(shù)據(jù)完整性的校驗。
添加回答
舉報
0/150
提交
取消