62,620
社区成员
发帖
与我相关
我的任务
分享
echo md5(chr(142));
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class utils {
public static void main(String[] args) {
char ss=(char)142;//这里换成56后md5后和php版的 md5后的结果一样
System.out.println(md5(ss+""));
}
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
echo 'hello';
<?php
#重要
header('Content-Type: text/html; charset=UTF-8');
function unicode_decode($unistr, $encoding = 'UTF-8', $ishex = false, $prefix = '&#', $postfix = ';') {
$arruni = explode($prefix, $unistr);
$unistr = '';
for($i = 1, $len = count($arruni); $i < $len; $i++) {
if (strlen($postfix) > 0) {
$arruni[$i] = substr($arruni[$i], 0, strlen($arruni[$i]) - strlen($postfix));
}
$temp = $ishex ? hexdec($arruni[$i]) : intval($arruni[$i]);
$unistr .= ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);
}
return iconv('UCS-2', $encoding, $unistr);
}
#将数字转成Unicode
$s = "\u".dechex(142);
#将Unicode转成UTF8后再计算MD5就跟Java一样了
echo md5(unicode_decode($s,'utf-8',true,'\u',''));#c18af90e0c90ea3b209bad6a3d373d82
#chr($char)函数只接受char类型参数,超出char范围的被强制向下转型,然后就没有然后了。
?>
ps.我是搞java的,php了解的不是太多,如有不妥之处,权当没看见哈哈哈哈
<?php
//php为正确的 结果:CA15B8C6D72A4442942045956DD371F8
$password="123456";
$pt='\x00\x00\x00\x00\x16\x9d\x56\x75';
$vc='!PRY';
$passwd = jspassword($password,$pt, $vc);
echo "<br>结果:".$pt."<br>".$vc."<br>密码:".$passwd."<br><br>";
function jspassword($p,$pt,$vc,$md5 = true)
{
echo $p.":".$pt.":".$vc;
if($md5)
{
$p = strtoupper(md5($p));
}
//echo "<br>".$p;exit;
$len = strlen($p);
$temp = null;
//echo "<br>md5Password:".$p."<br>";
for ($i=0; $i < $len ; $i = $i + 2)
{
//echo "<br>i:".$i;
$temp .= '\x'.substr($p, $i,2);
}
//echo "<br>".$temp."<br>";
//echo "<br><br><br>--->>>".md5(hex2asc($temp).hex2asc($pt));
//$str=hex2asc($temp).hex2asc($pt);
//echo "<br>内部:".$str."-->".md5(hex2asc($temp))."-->".md5(hex2asc($pt));
return strtoupper(md5(strtoupper(md5(hex2asc($temp).hex2asc($pt))).$vc));
}
/**
* 十六进制转字符
*
* @access private
* @param string $str
* @return string
*/
function hex2asc($str)
{
//echo "处理前:".$str."<br>";
//print_r( explode('\x', $str));
$str = join('', explode('\x', $str));
//echo "<br>处理后:".$str;
$len = strlen($str);
$data = null;
for ($i=0;$i<$len;$i+=2)
{
//echo "<br>::".substr($str,$i,2);
echo "<br>".hexdec(substr($str,$i,2)).":::".chr(hexdec(substr($str,$i,2)))."->".md5(chr(hexdec(substr($str,$i,2))));
$data.=chr(hexdec(substr($str,$i,2)));
}
echo "<br>".md5($data)."<br>";
return $data;
}
?>
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class utils {
public static void main(String[] args) {
utils u=new utils();
String up=u.jspassword("123456", "\\x00\\x00\\x00\\x00\\x16\\x9d\\x56\\x75", "!PRY", true);
System.out.println("-----------------------------");
System.out.println(up);
}
public String jspassword(String password,String pt,String vc,boolean md5){
if(md5)
{
password = utils.md5(password).toUpperCase();
}
int len =password.length();
String temp="";
for (int i=0; i < len ; i = i + 2)
{
temp += "\\x"+password.substring(i, i+2);
}
return (utils.md5(utils.md5(utils.hex2asc(temp)+utils.hex2asc(pt)) .toUpperCase()+vc) ).toUpperCase();
}
public static String hex2asc(String str){
String [] s=str.trim().split("\\\\x");
//System.out.println(s.length);
StringBuffer sb=new StringBuffer();
for(String sItem:s){
//System.out.println(sItem);
sb.append(sItem);
}
int len = sb.toString().length();
//String data = null;
StringBuffer sb1=new StringBuffer();
for (int i=0;i<len;i+=2)
{
int x=Integer.parseInt(sb.toString().substring(i, i+2),16);
char ss=(char) x;
System.out.println(x+"::"+ss+"转换后->"+utils.md5(String.valueOf(ss)));
sb1.append(String.valueOf(ss));
}
return sb1.toString();
}
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
public static String md5(byte[] bys) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(bys);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
你把这个方法像上面那样改成接受byte数组的,然后你这样调用
System.out.println(md5(new byte[] {(byte)142}));
结果应该是和PHP一样的