我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值(二)
2014-11-24 08:07:41
·
作者:
·
浏览: 1
*/
private static String byteArrayToHex(byte[] byteArray) {
// 首先初始化一个字符数组,用来存放每个16进制字符
char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
// new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))
char[] resultCharArray = new char[byteArray.length * 2];// 每个字节用 16 进制表示的话,使用两个字符
// 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去
int index = 0;
// 从第一个字节开始,对MD5的每一个字节转换成16进制字符的转换
for (byte b : byteArray) {
// 取字节中高 4 位的数字转换
//>>> 为逻辑右移(即无符号右移),将符号位一起右移
resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];
// 取字节中低4位的数字转换
resultCharArray[index++] = hexDigits[b & 0xf];
}
// 字符数组组合成字符串返回
return new String(resultCharArray);
}
}
下面是一个测试类,用于测试上面的MD5工具类是否有用
class MD5Test{
public static void main(String[] args) {
System.out.println(MD5Utils.stringToMD5(OuyangPeng));
long startTime = System.currentTimeMillis();
System.out.println(MD5Utils.fileToMD5(/home/ouyangpeng/Android/CanplayComp/Code.tar.gz));//9.6G的文件
long endTime = System.currentTimeMillis();
System.out.println(Time: + (endTime - startTime) / 1000);
}
}
测试结果如下:
30A81CB758C6918C7E43513839002171
05924A988C096A50B9BD4FA2AD7FA733
Time:86