急!谁能做出来送100元,还可再加,重赏之下必有勇夫!

maweihua 2015-03-30 10:31:48
用java运行了一段代码,然后用php运行了一段代码,但是结果确不一样,MD5得到的16位二进制数组都是一样的,就是在位运算的时候出错了,但是我不知道问题出在哪里?
本人对php不熟悉,php好像没有字节类型吧?也许我描述太模糊了,先看代码吧。 java代码:

String data = "!&22E2&!'&5aSJ^#$&6<&!&()pR49}I&dh111111";
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 < md.length; i++)
{
ret[i % 4 + 1] ^= md[i];
}
System.out.println("---------------"+new BigInteger(ret));//-----得到一个整数:2676031167
}
php代码:
$string = "!&22E2&!'&5aSJ^#$&6<&!&()pR49}I&dh111111";
$md5 = md5("0E2C83D839C026A5E0530100007FEB90".md5($string,true),true);
$data = array();
$data[0]="0";
for($i = 0; $i < strlen($md5); $i++){
$data[$i % 4 +1] ^=$md5[$i];
}
$val = 0;
$val = $data[1] & 0xff;
$val <<= 8;
$val |= $data[ 2] & 0xff;
$val <<= 8;
$val |= $data[3] & 0xff;
$val <<= 8;
$val |= $data[4] & 0xff;
echo $val;//327680

最后结果不一样:是不是精度的问题?还是我的代码有问题?
java:=2676031167
php:=327680
...全文
82 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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