http://blog.csdn.net/tongdao/article/details/20690187

在工作中需要和第三方进行Http通信,在通信内容中有几个参数涉及到了中文。自己在进行MD5加密验证过程中,遇到了一些很奇怪(本人认为MD5是一个通用简单的加密算法,应该很稳定很完美了吧!)的问题:

问题1:接收到的问题乱码了

解决:这个问题很常见,网上有很多说明。由于http协议在传输过程中使用的都是iso_8859_1编码,所以在接收到参数之后,用value = new String(value.getBytes("ISO-8859-1"),"UTF-8"); 方法转成utf-8就可以了。

问题2:按照问题1的解决办法,生成MD5加密之前的字符串(日志中显示中文没有乱码),但是MD5加密之后字符串和本地的生成的不一样。

解决:这个问题就比较奇怪了。我又详细的查看了查看了第三方的开发问题,发现其中有"台通知参数都用URLEncoder.encode("xxx","UTF-8")做了编码处理"这句话,是不是这个原因引起的呢?自己做了尝试将参数又通过value=URLDecoder.decode(value, "UTF-8")进行了解码。测试出来,加密的字符串一致了。

问题3:这个问题就更奇怪了,在测试环境MD5之后是一样的,在正式环境就不一样了,并且正式环境的tomcat重新启动之后就正常了,但是一段时间之后又出现问题了。

解决:这个问题是由于MD5中用的String.getBytes()没有显示的指定编码格式导致的。如果方法String.getBytes()不显示指定编码格式,本方法将返回该操作系统默认的编码格式的字节数组。(这个问题还有个疑问就是为什么重启tomcat之后又正常了)

总结:这个Http通信时,对方进行了怎么样的正向操作,你就要逆向把它解析出来。在日志看到的中文可能是并不准确的。中文乱码的时候,需要查看你处理过程中,可能涉及到的各种默认编码。

对中文进行MD5加密的注意事项(Java版,编码问题)的更多相关文章

  1. java 短连接+MD5加密短链接

    java 短连接+MD5加密短链接 import java.security.MessageDigest; public class ShotUrlUtil { public static void ...

  2. 使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)

    正常情况下使用md5加密 var crypto = require('crypto'); var md5Sign = function (data) { var md5 = crypto.create ...

  3. Java: md5 加密中文 & 注意编码

    今天使用java的md5加密一个字符串(含有部分中文),遇到问题,百思不得其解. 后面网上搜索了一下,才知道是[编码]的问题. 以前在asp中用md5加密的时候,了解 gb2312和utf-8编码下, ...

  4. 微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)

    开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持的来用就行了: 也随便说说小程序的get和post网络请求. 来看看效果图 ...

  5. js进行MD5加密(含中文),与后台JAVA加密之后结果不同(解决)

    开发小程序过程中与后台进行接口沟通,前期接口经过MD5加密和AES加密之后,后台进行解密. 今天出现一种情况,我前台加密之后的md5串与后台加密不同,后台发现可能是带用中文的原因, 这是加密之前的串: ...

  6. 数据对象转json与md5加密注意事项

    项目中遇到将OC数据对象类型转化字符类型,然后进行MD5加密的技术流程,在转化字符数组到字符加密过程中遇到一些问题. 问题 转化后的字符进行md5加密,出现与服务器加密结果不匹配的情况 分析 在对代码 ...

  7. android md5加密与rsa加解密实现代码

    import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security. ...

  8. [开源]用MQL4实现MD5加密

    本文转载自博客园:混沌的世界 原文地址:http://www.cnblogs.com/niniwzw/archive/2009/12/05/1617685.html 在用MQL4进行金融交易的时候,经 ...

  9. MD5加密、时间戳转换、base64算法加密、解密

    #region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...

随机推荐

  1. web技术栈中不可或缺的Linux技术

    Web技术最重要的载体便是服务器,服务器运行在公共的网络环境下,为广大的用户提供网页浏览.信息通讯.消息推送等服务,从最开始的硬件服务器到虚拟主机技术,再到虚拟化技术的出现和云概念的兴起,绝大部分都是 ...

  2. 5.8 C++重载自增与自减操作符

    参考:http://www.weixueyuan.net/view/6386.html 注意: 自增“++”与自减“--”都是一元操作符,其前置和后置两种形式都可以被重载. 前置 stopwatch ...

  3. 5.1 C++基本操作符重载

    参考:http://www.weixueyuan.net/view/6379.html 总结: 操作符重载指的是将C++提供的操作符进行重新定义,使之满足我们所需要的一些功能. 长度运算符“sizeo ...

  4. shell中环境变量

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的, ...

  5. netty的decoder encoder

    public class DelimiterBasedFrameDecoder extends ByteToMessageDecoder { 随便找了一个用字符串分割粘包的decoder,继承了Byt ...

  6. python调用shell脚本

    # coding=utf-8   //设置文本格式import os            //导入os方法print('hello')n=os.system('/home/csliyb/kjqy_x ...

  7. Asp.Net对Json字符串的解析和应用

    using System.Web.Script.Serialization; protected void Page_Load(object sender,EventArgs e) { //构建jso ...

  8. L253 Work and Pleasure

    To be really happy and really safe, one ought to have at least two or three hobbies, and they must a ...

  9. python自学第三天,列表

    1.列表 names=[] #这就是一个空列表 names=[1,5,2,3,4,5]#列表是用的中括号,每个元素是用逗号分开的.列表里面的元素是可以重复的. names[-1]#表示的是取列表的最后 ...

  10. django面试八

    1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. #2.Dja ...