php md5加密之后对字节进行异或操作的问题

php中文网
发布: 2016-06-20 12:59:31
原创
1193人浏览过

$string = "!&22E2&!'&5aSJ^#$&6 $md5 = md5("0E2C83D839C026A5E0530100007FEB90".md5($string,true),true);
对md5加密后返回的16位二进制字节进行异或操作
$data =  array();
 $data[0]="0";
for($i = 0; $i      $data[$i % 4 +1] ^=$md5[$i];
}
然后获得一个整数值
 $val = 0; 
        $val = $bytes[$data+1] & 0xff; 
        $val          $val |= $bytes[$data+ 2] & 0xff; 
        $val          $val |= $bytes[$data+ 3] & 0xff; 
        $val          $val |= $bytes[$data+4] & 0xff; 
echo $val;
为何返回的值不正确呢?是不是我哪里有错误了?请各位指点下

LibLib AI
LibLib AI

中国领先原创AI模型分享社区,拥有LibLib等于拥有了超多模型的模型库、免费的在线生图工具,不考虑配置的模型训练工具

LibLib AI 647
查看详情 LibLib AI

回复讨论(解决方案)

你应该说清楚你想做的事情是什么啊,就是你正确的逻辑是什么。而且你的代码本身也是有syntax error的。我也没看出来你想做什么。

感谢回答,我的目的就是对md5加密之后的字符串进行每8位做一次异或得到一个长整数

你说结果不正确,那么正确的值是什么呢?
你只给了代码片段,无法测试

感谢回答,我的目的就是对md5加密之后的字符串进行每8位做一次异或得到一个长整数



1. md5不叫加密 http://zh.wikipedia.org/wiki/MD5
2. 你这次的描述并没有比你代码中的注释给出更多的信息,请像一个程序员一样来描述。比如你说 每8位做一次异或,异或是一个二元操作操作符,那它是和谁异或。
3. 如楼上所述,你认为实现有问题,那请给出一个输入应该得到的正常的输出
4. 看我第一次回复,请先打理好自己的代码,把它写成可运行的版本,并且只保留与问题本身相关的部分,就算有逻辑错误也不能有语法错误。

你说结果不正确,那么正确的值是什么呢?
你只给了代码片段,无法测试


这往往解释了为什么国内程序员越来越多,而这些曾经老牌的中文技术社区均已没落了。
想如果再遇到不好好提问题的,应该封号,然后找个类似“提问的智慧”的文档,让被封人的朗诵一遍录音发过来手动解封。录音中同时要朗读发给这个人的一段验证码,避免作弊。
以后再不好好问问题,也不封此人的号了,就把他自己的朗诵链接回在问题后面。

PS: 我今天是有多闲.


感谢回答,我的目的就是对md5加密之后的字符串进行每8位做一次异或得到一个长整数



1. md5不叫加密 http://zh.wikipedia.org/wiki/MD5
2. 你这次的描述并没有比你代码中的注释给出更多的信息,请像一个程序员一样来描述。比如你说 每8位做一次异或,异或是一个二元操作操作符,那它是和谁异或。
3. 如楼上所述,你认为实现有问题,那请给出一个输入应该得到的正常的输出
4. 看我第一次回复,请先打理好自己的代码,把它写成可运行的版本,并且只保留与问题本身相关的部分,就算有逻辑错误也不能有语法错误。

好的谢谢如此耐心的回答啊,用java运行了一段代码,然后用php运行了一段代码,但是结果确不一样,也许我描述太模糊了,先看代码吧。
java代码:

String data = "!&22E2&!'&5aSJ^#$&6 String apSecert="0E2C83D839C026A5E0530100007FEB90";
ByteArrayOutputStream stream = new ByteArrayOutputStream();
stream.write(apSecert.getBytes());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(data.getBytes());
stream.write(md5.digest());
md5.update(stream.toByteArray());
byte[] md = md5.digest();
byte[] ret = new byte[5]; // 首字节保留0 防止转换成负数, 只使用后4位
for (int i = 0; i  {
ret[i % 4 + 1] ^= md[i];
}
System.out.println("---------------"+new BigInteger(ret));-----得到一个整数
}
php代码:
$string = "!&22E2&!'&5aSJ^#$&6 $md5 = md5("0E2C83D839C026A5E0530100007FEB90".md5($string,true),true);
$data =  array();
 $data[0]="0";
for($i = 0; $i      $data[$i % 4 +1] ^=$md5[$i];
}
 $val = 0; 
        $val = $data[1] & 0xff; 
        $val          $val |= $data[ 2] & 0xff; 
        $val          $val |= $data[3] & 0xff; 
        $val          $val |= $data[4] & 0xff; 
echo $val;

最后结果不一样:是不是精度的问题?还是我的代码有问题?
java:=2676031167
php:=16327680

php代码:我第一次发帖的代码,的确有问题,我再重新写一遍
$string = "!&22E2&!'&5aSJ^#$&6 $md5 = md5("0E2C83D839C026A5E0530100007FEB90".md5($string,true),true);
$data =  array();
 $data[0]="0";
for($i = 0; $i      $data[$i % 4 +1] ^=$md5[$i];
}
 $val = 0; 
        $val = $data[1] & 0xff; 
        $val          $val |= $data[ 2] & 0xff; 
        $val          $val |= $data[3] & 0xff; 
        $val          $val |= $data[4] & 0xff; 
echo $val;

是知道啊?能指出我哪里算错了吗?悬赏100人民币

你说 php 运行结果是 16327680
但你贴出的代码得到的是 327680

对的,是我写错了,是327680,我对PHP不熟悉,JAVA的值是正确的,我再考虑是不是PHP对位的运算和JAVA存在出入,因为JAVA是unicode编码,造成和php位运算出错?

这样写

$string = "!&22E2&!'&5aSJ^#$&6<&!&()pR49}I&dh111111";$md5 = md5("0E2C83D839C026A5E0530100007FEB90".md5($string,true),true);$data =  array(0,0,0,0);for($i = 0; $i < strlen($md5); $i++){  $data[$i % 4 ] ^= ord($md5[$i]);}$val = 0; foreach($data as $v) $val = $val * 256 + $v;printf('%u', $val); //2676031167
登录后复制

这样写

$string = "!&22E2&!'&5aSJ^#$&6<&!&()pR49}I&dh111111";$md5 = md5("0E2C83D839C026A5E0530100007FEB90".md5($string,true),true);$data =  array(0,0,0,0);for($i = 0; $i < strlen($md5); $i++){  $data[$i % 4 ] ^= ord($md5[$i]);}$val = 0; foreach($data as $v) $val = $val * 256 + $v;printf('%u', $val); //2676031167
登录后复制


感谢版主,你是高手,结贴了,我如何把钱打给你?
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号