那位大神能把我这个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();

}


四季花海
浏览 675回答 3
3回答

慕容森

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

开心每一天1111

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

慕后森

public&nbsp;function&nbsp;md5Encrypt($encryptString='',&nbsp;$encryptKey='') &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$keyByte&nbsp;=&nbsp;$this->getBytes($encryptKey); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$keyIpad&nbsp;=&nbsp;array(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;64;&nbsp;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$keyIpad[]&nbsp;=&nbsp;(isset($keyByte[$i])&nbsp;?&nbsp;$keyByte[$i]&nbsp;:&nbsp;0)&nbsp;^&nbsp;54; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$keyOpad&nbsp;=&nbsp;array(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;64;&nbsp;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$keyOpad[]&nbsp;=&nbsp;(isset($keyByte[$i])&nbsp;?&nbsp;$keyByte[$i]&nbsp;:&nbsp;0)&nbsp;^&nbsp;92; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$string&nbsp;=&nbsp;md5($this->byteToString($keyIpad)&nbsp;.&nbsp;$encryptString); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$string&nbsp;=&nbsp;substr(hex2bin($string),&nbsp;0,&nbsp;16); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$signature&nbsp;=&nbsp;md5($this->byteToString($keyOpad).&nbsp;($string)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$signature; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;getBytes($string) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$bytes&nbsp;=&nbsp;array(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;strlen($string);&nbsp;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$bytes[]&nbsp;=&nbsp;ord($string[$i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$bytes; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;byteToString($args&nbsp;=&nbsp;array()){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$str&nbsp;=&nbsp;''; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;count($args);&nbsp;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$str&nbsp;.=&nbsp;chr($args[$i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$str; &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java