您的位置:首页 > 编程语言 > Java开发

解决Java中MD5加密utf-8格式时与其他语言不同的问题

2016-10-09 16:22 543 查看
Java中MD5加密一般写法:
<strong>
public final static String MD5(String s) {
try {
byte[] btInput = s.getBytes();
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < md.length; i++) {
int val = ((int) md[i]) & 0xff;
if (val < 16)
sb.append("0");
sb.append(Integer.toHexString(val));

}
return sb.toString();
} catch (Exception e) {
return null;
}
}
</strong>
如果是给utf-8格式的字符串加密,上面的代码就会有问题。因为Java默认编码是unicode, byte[] btInput = s.getBytes();获得的是默认的unicode的byte数组。需要将这句改为byte[] btInput = s.getBytes("utf-8");就OK啦。
<strong>
public final static String MD5Encoder(String s, String charset) {
try {
byte[] btInput = s.getBytes(charset);
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < md.length; i++) {
int val = ((int) md[i]) & 0xff;
if (val < 16){
sb.append("0");
}
sb.append(Integer.toHexString(val));
}
return sb.toString();
} catch (Exception e) {
return null;
}
}
</strong>
[code]
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐