/**
* VDSP自己的一个摘要算法
* @param info 待摘要的信息串
* @return 经过摘要的信息串
* @throws java.lang.Exception
*/
public static String md5(String info) throws Exception {
try {
if (algorithm == null)
{
algorithm = MessageDigest.getInstance("MD5");
}
algorithm.update(info.getBytes());
byte[] digesta = algorithm.digest();
return byte2hex(digesta);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
/**
* 对输入字节串进行置换
* @param b 待置换的字节串
* @return 经过置换的字符串
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
if (n < b.length - 1) {
hs = hs + ":";
}
}
return hs.toUpperCase();
}
String stmp = java.lang.Integer.toHexString(b[n] & 0XFF)
在32位的电脑中数字都是以32格式存放的,如果是一个byte(8位)类型的数字,他的高24位里面都是随机数字,低8位
才是实际的数据。java.lang.Integer.toHexString() 方法的参数是int(32位)类型,如果输入一个byte(8位)类型的数字,这个
方法会把这个数字的高24为也看作有效位,这就必然导致错误,使用& 0XFF操作,可以把高24位置0以避免这样错误
的发生。