首页 > Java > java教程 > 正文

JAVA和PHP对特殊转义字符进行MD5加密,为什么结果不一致?

霞舞
发布: 2024-10-25 19:40:44
原创
930人浏览过

java和php对特殊转义字符进行md5加密,为什么结果不一致?

java md5加密踩坑记录:特殊转义字符问题

在进行md5加密时,可能会遇到特殊字符转义的问题,导致加密结果与预期不一致。最近,我们在使用php和java对字符串进行md5加密时就遇到了这样的问题。

php中的代码如下:

$pwd=123456;
echo md5($pwd."\xa3");
登录后复制

这段代码使用"xa3"对字符串进行了转义,结果为e885a841c486e07e91290546698f748c。

立即学习PHP免费学习笔记(深入)”;

而在java中,相同的字符串使用"xa3"转义后,md5加密结果却不同:

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

北极象沉浸式AI翻译 24
查看详情 北极象沉浸式AI翻译
int str="123456";
return getmd5(str+"\xa3");
登录后复制

加密结果为3245fdd037dda90671a058373e238244。

经过查证发现,php中的"xa3"会被转义为"u00a3"(unicode码)。而java中直接使用"xa3",导致它仅被当作一个普通的字符进行加密,而非转义字符。

解决方法是将java中的转义字符正确转换为unicode码。可以参考以下代码:

String pwd = "123456";
String salt = "u00a3"; // 就是的unicode码
String str = pwd + salt;
byte[] bytes = str.getBytes("ISO-8859-1"); //把所有的字节都当成PHP默认的ISO-8859-1字符来处理
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(bytes);
String md5Hex = String.format("%02x", new java.math.BigInteger(1, digest));
System.out.println(md5Hex);
登录后复制

经过如此修正后,java中的md5加密结果与php中的结果一致,问题得到解决。

以上就是JAVA和PHP对特殊转义字符进行MD5加密,为什么结果不一致?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号