java-那位大神能把我这个Java的md5的加密方法写个php版本哦,感激噢!

问题描述

那位大神能把我这个Java的md5的加密方法写个php版本哦,感激噢!

那位大神能把我这个Java的md5的加密方法写个php版本哦,感激噢,Java代码如下!
写这个的人 描述的思路如下
1.将秘钥、源串分别转换byte数组
2.声明2个64位数组 将key的byte数组分别做异或运算填充进去 并分别补充 54、92 补满64长度
3.获得md5摘要算法的MessageDigest 对象
4.使用其中一个数组及源串的数组更新MessageDigest 摘要 完成哈希计算
5.重置摘要
6.使用另一个数组更新摘要 使用4中结果 从0到16开始更新摘要 完成哈希计算
7.转换字符串
public String cryptMd5(String source, String key) {
byte[] k_ipad = new byte[64];
byte[] k_opad = new byte[64];
byte[] keyb;
byte[] value;
try { byte[] keyb = key.getBytes("UTF-8");
value = source.getBytes("UTF-8");
}
catch (UnsupportedEncodingException e)
{
byte[] value;
keyb = key.getBytes();
value = source.getBytes();
}
Arrays.fill(k_ipad, keyb.length, 64, 54);
Arrays.fill(k_opad, keyb.length, 64, 92);
for (int i = 0; i < keyb.length; i++)
{
k_ipad[i] = (byte)(keyb[i] ^ 0x36);
k_opad[i] = (byte)(keyb[i] ^ 0x5C);
}
MessageDigest md = null;
try
{
md = MessageDigest.getInstance("MD5");
}
catch (NoSuchAlgorithmException e)
{
return null;
}
md.update(k_ipad);
md.update(value);
byte[] dg = md.digest();
md.reset();
md.update(k_opad);
md.update(dg, 0, 16);
dg = md.digest();
return toHex(dg); }

public static String toHex(byte[] input)
{
if (input == null) {
return null;
}
StringBuffer output = new StringBuffer(input.length * 2);
for (int i = 0; i < input.length; i++)
{
int current = input[i] & 0xFF;
if (current < 16)
output.append("0");
output.append(Integer.toString(current, 16));
}

return output.toString();

}

解决方案

 function cryptMd5($source, $key) {
  if(! mb_check_encoding($source, 'utf-8')) $source = mb_convert_encoding($source, "utf-8", "auto");
  if(! mb_check_encoding($key, 'utf-8')) $key = mb_convert_encoding($key, "utf-8", "auto");
  $k_ipad = str_pad($key, 64, chr(54));
  $k_opad = str_pad($key, 64, chr(92));
  for($i=0; $i<strlen($key); $i++) {
    $k_ipad{$i} = $key{$i} ^ chr(0x36);
    $k_opad{$i} = $key{$i} ^ chr(0x5c);
  }
  $dg = md5($source . substr($k_ipad, strlen($source)), true);
  $dg = md5(substr($dg, 0, 16) . substr($k_opad, 16), true);
  return bin2hex($dg);
}

解决方案二:

我想说你的代码里好像有点问题。所以对理解你的代码有点困难。有些可以大体猜到你的目的。但是下边这两句就很难猜了:
Arrays.fill(k_ipad, keyb.length, 64, 54);
Arrays.fill(k_opad, keyb.length, 64, 92);

最后一个参数应该是byte变量吧。

时间: 2024-11-02 18:47:18

java-那位大神能把我这个Java的md5的加密方法写个php版本哦,感激噢!的相关文章

有哪位大神能说说吗?java,eclipse

问题描述 有哪位大神能说说吗?java,eclipse System.out.println(args[0]);这代码是什么意思? 解决方案 接收外部输入的意思. 解决方案二: 输出命令行参数的第一个参数. 你用过dos命令么?比如ping 1.2.3.4,这里1.2.3.4就是一个参数.你可以在程序中获取. 解决方案三: 打印数组里面的元素! 解决方案四: 打印数组中的元素 ,一般在main函数中出现,不必太纠结 解决方案五: 是打印第一个参数吧. 解决方案六: 打印args数组的第一个元素,

怎么把eclipse写代码周围的东西最小化呢?有哪位大神能说说吗?java,eclipse

问题描述 怎么把eclipse写代码周围的东西最小化呢?有哪位大神能说说吗?java,eclipse 怎么把eclipse写代码周围的东西最小化呢?有哪位大神能说说吗?java,eclipse 解决方案 周围?我只知道可以把左边的目录,下面的控制台,右边的其他内容最小化,和浏览器最小化是一样的.不知道你说的是不是这个意思 解决方案二: 把当前编辑器最大化就可以了啊,快捷键ctrl加m. 解决方案三: 双击当前编辑器的标题栏就可以实现你说的要求

那位大神能帮我看看这是什么错误,实在是弄不懂啊

问题描述 那位大神能帮我看看这是什么错误,实在是弄不懂啊 解决方案 它说那个ndk-build.cmd在PATH里没有找到你查看查看啊

那位大神能翻译一下!求。求。求。

问题描述 密码值MGLKOEOEORSJMIQNOEDF侦查包cCoXdzTdAk.*:WeLGCND5码cCoXdzTdAk.*:WeLG16禁值?X5k*.NE2

关于java的,有哪位大神能说说吗?

问题描述 关于java的,有哪位大神能说说吗? java已做好登录窗口和查询窗口但是当查询窗口查看另外一条信息时同时又跳出了登录床界面,我想在查询窗口查询信息时不跳出登录窗口,要怎么办呢?? 解决方案 跳出的登录窗口是新建立的线程还是原来的登录窗口 解决方案二: 猜测是登录的时候没有成功写入session(cookie),当验证登录的时候取出的内容为空,判定为未登录,于是跳转到了登录窗口 解决方案三: 你想登录后才能查询还是不登录查询,登录后查询的话可能是你判断语句有问题,再或者是session

java-关于JAVA的有哪位大神能说说吗?

问题描述 关于JAVA的有哪位大神能说说吗? eclipse包资源库那里怎么换皮肤?关于JAVA的有哪位大神能说说吗? 解决方案 这个参考:http://jingyan.baidu.com/article/cbf0e500909b372eaa289329.html

关于java,eclipse有哪位大神能说说嘛?

问题描述 关于java,eclipse有哪位大神能说说嘛? 内部类怎么访问外部类的私有变量?关于java,有哪位大神能说说嘛? 解决方案 直接可以访问的,当然内部类不能为静态的,如果是静态的话,就只能访问外部的静态属性了. 解决方案二: 可以直接访问吧,你自己写写demo试试吧 解决方案三: 可以直接访问.直接写就可以了. 解决方案四: 当然可以直接访问.但当前类不能访问其他类的私有成员变量,只能通过get/set方法 解决方案五: 内部类可以访问所属外部类的所有成员变量,包括私有成员.

string-关于JAVA,用哪位大神能说说这代码是什么意思吗?

问题描述 关于JAVA,用哪位大神能说说这代码是什么意思吗? s = new String("EOL"); break; 解决方案 不知道这样问有什么意义 解决方案二: 新建一个String对象s,并赋值为EOL,然后中断 解决方案三: 应该是for循环或者是switch中的语句,就是简单的字符串创建,创建一个值为EOF的字符串后跳出循环. 解决方案四: 可以理解为创建了两个对象 解决方案五: 你的代码就不能截的再短一点吗??? 解决方案六: 就是s="EOL" 结

怎样用java调用微信接口生成二维码,并将图片存图硬盘中,求那位大神可以伸出援手,万分感激。

问题描述 怎样用java调用微信接口生成二维码,并将图片存图硬盘中,求那位大神可以伸出援手,万分感激. 怎样用java调用微信接口生成二维码,并将图片存图硬盘中,求那位大神可以伸出援手,万分感激. 解决方案 调用之后,微信会返回一个图片的二进制?还是一个图片地址?如果是图片的二进制直接用inputstream存就可以了啊,如果是图片地址,用网络请求相应地址,然后保存即可. 解决方案二: 回调的是一个URL,根据这个URL调用zing的方法生成二维码图片(bitmap类型),再把图片用文件流的形式