md5包含中文2次加密不一致

潍一 2015-10-28 03:39:00
前端提交表单过来,其中有一条数据是中文的,然后我把数据拼成一串之后进行加密,但是这次md5加密是错的。
后来我debug获取到拼接的字符串,然后在main方法中md5加密,加密就正确了。
表单提交过来的中文并没有乱码,但是如果我提交表单时不写中文数据,那么加密就是正确的!
请问谁有经历过吗?
...全文
183 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
渭水飞熊 2015-10-28
  • 打赏
  • 举报
回复
肯定是编码的问题,在MD5加密前,把字符串getBytes("UTF-8")一下再加密,后台接收后也用UTF-8获取下就好了。
oO临时工Oo 2015-10-28
  • 打赏
  • 举报
回复
看中文有字符集有没问题。 在“正式流程”中和“”main“”方法中,分别debug。看两个字符串的字节码是不是一样的。
MD5是目前最热门的加密算法,我们通常用MD5值来验证文件的完整性。例如在一些比较正规的下载网站,通常会提供软件的MD5值,这样我们就可以对下载回来的文件用MD5校检软件(如HashX等)做一MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。但当两个不同文件的MD5值完全一样时,你还会信任MD5吗? 找出破解MD5加密方法的专家是我国山东大学的王小云教授,这则新闻在以前的软件版块曾详细报道过。但之后MD5的破解一直没有进展,直到最近,国外的科学家研究出了新的MD5碰撞破解方法,可以让两个不同文件的MD5值完全一样,而之前我们一直认为一个文件的MD5值在世界上是独一无二的,这就像一个人克隆了你的指纹然后冒充你一样恐怖! 为了验证MD5值的独一无二性,我们来做一个简单的试验: 在桌面上新建一个文本文档,文件名为“test.txt”,内容为“OfficeBa”。然后将这个文本文档拖动到校验工具HashX中,点击左上角的“Hash File”按钮,得到其MD5值为051cb2917a5b70505e1687dee449c765,然后为文档中的“OfficeBa”加上双引号,保存后再通过HashX进行校检,发现MD5值变成了9ab117400993b70bc9945a9b15749d5d了。可见,一个极细微的变动都会导致文件的MD5值不同! 那么我们能让两个程序文件的MD5一致,却又都能正常运行,并且可以做完全不同的事情么?答案是:“可以!”。要让两个不同文件的MD5值相同,可以通过一款名为fastcoll的小工具来完成我们同样以刚才的test.txt来做试验: -h [--help] 显示选项 -q [--quiet] 简化 -i [-ihv] arg 使用指定的初始值,默认是md5初始值 -p [-prefixfile] arg 使用给定的前缀计算初始值,仍然把数据复制到输出文件中(必须是个文件名) -o [--out] arg 指定输出文件名,此选项必须是最后一个参数,而且两个文件名必须同时指定 默认的是 -o msg1.bin msg2.bin 把解压出来的fastcoll_v1.0.0.5.exe与test.txt放在同一目录,然后在“命令提示符”中输入:“fastcoll_v1.0.0.5.exe -i test.txt -p test.txt -o cbi.exe cbi2.exe”并回车,在同目录中会生成名为cbi.exe和cbi2.exe文件,我们用HashX校验他们的MD5值,可以发现是完全一样的,但是在HashX中用“SHA-1”加密算法进行校验的时候,结果竟然是不同的(SHA-1加密算法生成的结果也是独一无二的)!可见这已经是完全不同的两个文件,但是他们的MD5值竟然完全相同。 如果黑客从网上下载一个工具,给其捆绑上木马,然后通过工具让其MD5值和原文件一样。那么当用户下载了文件后用MD5校验工具进行校验时就会发现带毒文件和原文件MD5值完全一样,就会放心地去运行,结果可想而知。所以,MD5加密已经不再可信!
本书是Java安全领域的百科全书,密码学领域的权威经典,4大社区一致鼎力推荐。 全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。 Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;系统架构师将通过本书领悟构建安全企业级应用的要义;其他领域的安全工作者也能通过本书一窥加密与解密技术的精髓。 第一部分基础篇 第1章企业应用安全2 1.1 我们身边的安全问题2 1.2 拿什么来拯救你,我的应用3 1.3 捍卫企业应用安全的银弹8 1.4 为你的企业应用上把锁9 1.5 小结10 第2章企业应用安全的银弹—密码学11 2.1 密码学的发家史11 2.2 密码学定义、术语及其分类15 2.3 保密通信模型17 2.4 古典密码18 2.5 对称密码体制19 2.6 非对称密码体制26 2.7 散列函数28 2.8 数字签名29 2.9 密码学的未来30 2.10 小结32 第3章Java加密利器34 3.1 Java与密码学34 .3.2 java.security包详解37 3.3 javax.crypto包详解70 3.4 java.security.spec包和javax.crypto.spec包详解85 3.5 java.security.cert包详解91 3.6 javax.net.ssl包详解100 3.7 小结107 第4章他山之石,可以攻玉109 4.1 加固你的系统109 4.2 加密组件Bouncy Castle 111 4.3 辅助工具Commons Codec 120 4.4 小结121 第二部分实践篇 第5章电子邮件传输算法—Base64 134 5.1 Base64算法的由来134 5.2 Base64算法的定义134 5.3 Base64算法与加密算法的关系135 5.4 实现原理136 5.5 模型分析137 5.6 Base64算法实现138 5.7 Url Base64算法实现147 5.8 应用举例151 5.9 小结153 第6章验证数据完整性—消息摘要算法155 6.1 消息摘要算法简述155 6.2 MD算法家族157 6.3 SHA算法家族167 6.4 MAC算法家族181 6.5 其他消息摘要算法195 6.6 循环冗余校验算法—CRC算法206 6.7 实例:文件校验209 6.8 小结211 第7章初等数据加密—对称加密算法213 7.1 对称加密算法简述213 7.2 数据加密标准—DES 214 7.3 三重DES—DESede 222 7.4 高级数据加密标准—AES 227 7.5 国际数据加密标准—IDEA 232 7.6 基于口令加密—PBE 236 7.7 实例:对称加密网络应用242 7.8 小结254 第8章高等数据加密—非对称加密算法256 8.1 非对称加密算法简述256 8.2 密钥交换算法—DH 258 8.3 典型非对称加密算法—RSA 269 8.4 常用非对称加密算法—ElGamal277 8.5 实例:非对称加密网络应用284 8.6 小结296 第9章带密钥的消息摘要算法—数字签名算法297 9.1 数字签名算法简述297 9.2 模型分析298 9.3 经典数字签名算法—RSA 299 9.4 数字签名标准算法—DSA 306 9.5 椭圆曲线数字签名算法—ECDSA 311 9.6 实例:带有数字签名的加密网络应用318 9.7 小结319 第三部分综合应用篇 第10章终极武器—数字证书332 10.1 数字证书详解332 10.2 模型分析335 10.3 证书管理337 10.4 证书使用351 10.5 应用举例360 10.6 小结360 第11章终极装备—安全协议362 11.1 安全协议简述362 11.2 模型分析364 11.3 单向认证服务369 11.4 双向认证服务381 11.5 应用举例387 11.6 小结387 第12章量体裁衣—为应用选择合适的装备389 12.1 实例:常规Web应用开发安全389 12.2 实例:IM应用开发安全399 12.3 实例:Web Service应用开发安全420 12.4 小结443 附录A Java 6支持的算法445 附录B Bouncy Castle支持的 算法447

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧