解决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]
相关文章推荐
- 解决Java中MD5加密utf-8格式时与其他语言不同的问题
- 解决Java中MD5加密utf-8格式时与其他语言不同的问题
- Android RSA与Java RSA加密不同标准产生问题的解决方法
- 其他语言(JAVA)调用.NET Web服务返回的DataSet的问题
- Java与.Net环境下RSA加密解密交互不成功的问题解决【续】
- [笔记].怎样解决gcc无法编译UTF-8格式的C文件的问题
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)
- fcitx 关于多语言,不同编码的一点说明;同时也可以用于解决fcitx不能输入问题
- 用UTF-8完全解决JSP+MYSQL多国语言文字编码问题
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- 用UTF-8完全解决JSP+MYSQL多国语言文字编码问题
- xp下新建文本文档编码格式预订为UTF-8 -- 解决简繁系统txt乱码问题
- Java解决UTF-8 BOM问题
- java不同容器不同操作系统下中文问题解决方法
- 解决NTFS磁盘格式下面 文件加密情况下 SVN访问问题
- Excel中“不同的单元格格式太多”问题解决方法
- 不同database排序方式,不同语言,如何解决国际化编程问题
- Java与.Net环境下RSA加密解密交互不成功的问题解决
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- Java--帮同学解决问题--第一次java语言技术支持课(第12题)--求1000之内的所有完全数