最近在用MD5的时候,在byte[] 转成String类型的时候
b.toString是调用了b这个object对象的类的toString方法。一般是返回这么一个String:[class name]@[hashCode]。
new String(b)是根据parameter是一个字节数组,使用java虚拟机默认的编码格式,将这个字节数组decode为对应的字符。若虚拟机默认的编码格式是ISO-8859-1,按照ascii编码表即可得到字节对应的字符。
例如:
package com.solex.workflow;
import java.security.MessageDigest;
public class MD5test {
public String MD5(String s) {
try {
//将字符串转为byte数组
byte[] b = s.getBytes();
//获取MessageDigest对象,申明使用MD5算法进行加密(还有SHA算法)
MessageDigest md = MessageDigest.getInstance("MD5");
//输入报文
md.update(b);
//生成摘要
byte[] bytes = md.digest();
return byte2str(bytes);
} catch (Exception exception) {
exception.printStackTrace();
return null;
}
}
/* 把字节数组转为16进制字符串 */
public String byte2str(byte[] b) {
char[] hexNumsStr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
int len = b.length;
char[] result = new char[len * 2];
int k = 0;
for (int i = 0; i < len; i++) {
result[k++] = hexNumsStr[b[i] >>> 4 & 0xf];
result[k++] = hexNumsStr[b[i] & 0xf];
}
return new String(result);
}
public static void main(String[] args){
MD5test md5test=new MD5test();
System.out.print(md5test.MD5("13579"));
}
}
结果为:E13DD027BE0F2152CE387AC0EA83D863
但是:
package com.solex.workflow;
import java.security.MessageDigest;
public class MD5test {
public String MD5(String s) {
try {
//将字符串转为byte数组
byte[] b = s.getBytes();
//获取MessageDigest对象,申明使用MD5算法进行加密(还有SHA算法)
MessageDigest md = MessageDigest.getInstance("MD5");
//输入报文
md.update(b);
//生成摘要
byte[] bytes = md.digest();
return byte2str(bytes);
} catch (Exception exception) {
exception.printStackTrace();
return null;
}
}
/* 把字节数组转为16进制字符串 */
public String byte2str(byte[] b) {
char[] hexNumsStr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
int len = b.length;
char[] result = new char[len * 2];
int k = 0;
for (int i = 0; i < len; i++) {
result[k++] = hexNumsStr[b[i] >>> 4 & 0xf];
result[k++] = hexNumsStr[b[i] & 0xf];
}
return result.toString();
}
public static void main(String[] args){
MD5test md5test=new MD5test();
System.out.print(md5test.MD5("13579"));
}
}
结果为:[C@38a97b0b
PS:new String()一般用于转码的时候使用
toString()一般用于打印的时候使用
更多内容请关注微信公众号“外里科技”