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. Alpha 冲刺 (6/10

    Alpha 冲刺 (6/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.组织会议 2.帮助队员解决 ...

  2. 3.10 C++虚基类 虚继承

    参考:http://www.weixueyuan.net/view/6367.html 总结: 本例即为典型的菱形继承结构,类A中的成员变量及成员函数继承到类D中均会产生两份,这样的命名冲突非常的棘手 ...

  3. Mysql text类型的最大长度

    MySQL 3种text类型的最大长度如下: TEXT 65,535 bytes ~64kb MEDIUMTEXT 16,777,215 bytes ~16Mb LONGTEXT 4,294,967, ...

  4. AngularJS输出helloworld

    AngularJS是什么? AngularJS是目前很火的前端JS框架之一, AngularJS的开发团队将其描述为一种构建动态Web应用的结构化框架.它是完全使用JavaScript编写的客户端技术 ...

  5. IntelliJ IDEA导入Javax包(servlet-api.jar)

    在初次使用 IntelliJ IDEA 中,当你使用javax.servlet包下的类时(例:javax.servlet.http.HttpServlet), 在你会发现在IntelliJ IDEA里 ...

  6. SpringMVC学习二

    处理请求 今天学了三种请求,一种是 PathVariable ,一种是 RequestParam ,还有一种是CookieValue,并实现简单rest增删改查 上代码 package com.spr ...

  7. go语言求1到100之内的质数

    素数指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数.换句话说,只有两个正因数(1和自己)的自然数即为素数(也叫质数).比1大但不是素数的数称为合数.1和0既非素数也非合数. ...

  8. uniGUI HyperServer

    uniGUI HyperServer 是一种新的服务器体系架构, 旨在高度提高 uniGUI 应用程序的可用性.稳定性和特定的可伸缩性. 这一目标是通过应用业界已知和广泛使用的技术 (如负载平衡和过程 ...

  9. 3--Selenium环境准备--Eclipse 引入 selenium-server包

    1.下载selenium-server包   selenium-server-standalone包是Seleniumd的核心jar包,其中包含了各种元素定位和调用浏览器的方法.下载jar包后,在ID ...

  10. Invocation of init method failed; nested exception is java.text.ParseException: '?' can only be specfied for Day-of-Month or Day-of-Week.

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cronTrigger' ...