同一字符串,MD5加密后出现不同的结果

同一字符串,MD5加密后出现不同的结果


背景

公司数据采用MD5加密和ssl双向认证,最近把项目部署到服务器进行测试,结果MD5验证总是通不过,服务器在请求过来的加密32位串和本地加密32位串作对比时,总是返回false,那么问题来了,加密之前的明文是相同的,为何同样的加密方法却得到了不同的结果?

问题分析

首先考虑到的是操作系统的不同,win下运行正常的代码为何到linux下就不行了,但是MD5加密并不会受到不同系统的影响,这个原因被否决了。
最终问了下技术经理,问题原因才定位出来,问题就出在编码上,我们的项目的默认编码是GBK的编码,win下的默认编码也是GBK的编码,而linux一般情况下默认编码是UTF-8的编码,查看项目中确实有字段包含中文且没有对编码作出处理,传输字段理的不够清楚。

解决方案

对传输的数据指定编码即可解决问题:

String "处理后字符串" = URLEncoder.encode("处理前字符串", "utf-8");

思考

  1. 一定要找准自己的位置,切勿自以为是,简单的会用一些技术,通了,搞定了,就意味自己掌握了,这是一个非常大的误区。
  2. 要对技术的真正实现原理清楚,只有了解真正的原理,代码的效率才会高,遇到问题就不会没头没脑,浪费宝贵的时间。
  3. 这种简单的解决方案可能存在不足,以后需要多了解编码方面的知识。

©版权归Peiel所有,转载请注明出处。

你可能感兴趣的:(历程)