/**
* MD5加密类
* Created by one on 2017/4/25.
*/
public class getMD5 {
//加密
public static String encode(String str) {
if (str == null || "".equals(str)) {
return null;
}
StringBuffer sb = new StringBuffer();
try {
MessageDigest code = MessageDigest.getInstance("MD5");
code.update(str.getBytes());
byte[] bs = code.digest();//使用字节数组对摘要进行最后更新
for (int x:bs) {
x=x&;//将byte转换成int
if (x < ) {
sb.append();
}
sb.append(Integer.toHexString(x));//sb添加转码后的字符串
}
}catch (NoSuchAlgorithmException e){
e.printStackTrace();
}
return sb.toString().toUpperCase();//将得到的字节数组变成字符串返回
}
//看一下效果
// public static void main(String[] agrs){
// System.out.print(getMD5("one"));
//}
}
注:为什么将byte转换成int 要和 0xff 进行与运算?
Java中的byte是一个字节保存的(8位),int是4个字节(32位),而 Integer.toHexString的参数是int ,当byte强制转换成int时,对于负数,会做位扩展。比如一个byte的-1(0×ff)会变成int的-1(0×ffffffff),这样转换出来的结果就有问题
而0×ff默认是整形,一个byte跟0×ff相与 会先将那个byte转换成整形运算,这样,结果中后24个比特总会被请0,这样结果就没什么问题了