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. UVa 10859 - Placing Lampposts 树形DP 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  2. WPF 之 TreeView节点重命名

    下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和TextBox控件的Text属性上,并且让两者绑定相同的属性,同时使TextBox控件刚好完全覆盖TextBlock控 ...

  3. 笨办法11提问-raw_input

    源代码如下,有个改动 print "How old are you?", age = raw_input() print "How tall are you?" ...

  4. Could not load driverClass ${driverClassName} 的解决方案

          对项目进行ssm整合的过程中,发现报这个错误:Could not load driverClass ${driverClassName} 不明所以,在网上找了半天,各种答案都有,最后终于找 ...

  5. Model1与Model2

    Model1与Model2开发模式的介绍及区别 转载 浅析Java开发中的Model1和Model2

  6. RabbitMQ Dead Lettering(死信)

    死信,顾名思义,就是死掉的消息,死掉的消息是会被一般的队列丢弃的.如果这些消息很重要,而我们又需要,怎么办?凡事都有一个退路,现在就有一种方法可将这些死信消息存下来,那就是DLX(Dead Lette ...

  7. vue-8-组件

    注册 注册一个全局组件:Vue.component(tagName, options) Vue.component('my-component', { template: '<div>A ...

  8. SQL-13 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。

    题目描述 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t.CREATE TABLE IF NOT EXISTS "titles" ( ...

  9. 驱动链表(LIST_ENTRY)

    DDK提供了两种链表的数据结构,双向链表和单向链表,其定义如下: typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIS ...

  10. turtle

    画一组同切圆 输入 import turtle turtle.color('red') turtle.circle(30) turtle.circle(60) turtle.circle(90) tu ...