最新消息:本站所有跳转向bbs.ykit.cn的附件将全面停止,附件已转移到https://www.qingsj.com

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

PHP 有客 71浏览 0评论

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

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

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

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

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

转载请注明:有客帮 » 同一字符串,MD5加密后出现不同的结果

您必须 登录 才能发表评论!