先了解PHP的基本語(yǔ)言結(jié)構(gòu),然后去嘗試讀懂PHP項(xiàng)目的代碼,然后就按著代碼功能,用JAVA語(yǔ)言重寫一遍就是了,暫不知道有直接從PHP代碼轉(zhuǎn)成JAVA的工具。。。
創(chuàng)新互聯(lián)專注于大渡口企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。大渡口網(wǎng)站建設(shè)公司,為大渡口等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
php代碼沒幾行,信息量很大,翻譯成java代碼行數(shù)量比較大。僅提供思路和php代碼解釋。
---------------
?php?
$appid?=?"123"; //數(shù)組里面的值,id。
$apikey?=?"456";?//數(shù)組里面的值,為加密密鑰。
$secretKey?="789";?//數(shù)組里面的值,安全密鑰。
$timestamp?=?time();?////數(shù)組里面的值,獲得當(dāng)前時(shí)間。
//UNIX?時(shí)間戳(timestamp)是?PHP?中關(guān)于時(shí)間日期一個(gè)很重要的概念,它表示從?1970年1月1日?00:00:00?到當(dāng)前時(shí)間的秒數(shù)之和。
//echo輸出$timestamp變量值,例如輸出了1389379960
echo?$timestamp;??
//定義數(shù)組。以鍵值對(duì)方式存儲(chǔ)。
//'appid'?'apikey'?'secretkey'?'timestamp'是key,鍵。
//$appid?$apikey,?$secretKey?$timestamp是value,值。
$params?=?array('appid'=$appid,?'apikey'=$apikey,?'secretkey'=$secretKey,?'timestamp'=$timestamp);
//對(duì)數(shù)組鍵值進(jìn)行升序排序。排序結(jié)果為apikey?appid?secretkey?timestamp
ksort($params);
//拼接數(shù)組中的參數(shù),并且用encoded編碼。
//http_build_query?--?生成?url-encoded?之后的請(qǐng)求字符串。當(dāng)數(shù)組沒有寫下標(biāo)時(shí),就會(huì)用第二個(gè)參數(shù)結(jié)合當(dāng)前默認(rèn)下標(biāo)當(dāng)前綴。
//$param_uri變量值,結(jié)果為apikey=456appid=123secretkey=789×tamp=1389379498
$param_uri?=?http_build_query($params,'','');
echo?$param_uri;???//echo輸出結(jié)果為apikey=456appid=123secretkey=789×tamp=1389379498
//先使用調(diào)用hash_hmac方法加密,HMAC-SHA1算法。
//$secretKey為安全密鑰,$param_uri為要加密的明文。'sha1'是HMAC-SHA1算法。
//再調(diào)用base64_encode方法加密,base64_encode?使用?MIME?base64?對(duì)數(shù)據(jù)進(jìn)行編碼。
$sig?=?base64_encode(hash_hmac('sha1',?$param_uri,?$secretKey));
?
java:
1、用hashmap存儲(chǔ)元素,鍵值對(duì)方式。
MapString,?String?hashMap?=?new?HashMapString,?String(){
{
put("appid",?"123");
put("apikey",?"456");
put("secretKey",?"789");
put("timestamp",?"當(dāng)前UNIX?時(shí)間戳,秒數(shù),java中獲取");
}????????????
};
2、java中可以通過(guò)Timestamp獲得UNIX?時(shí)間戳。
3、然后對(duì)hashmap進(jìn)行升序排序。
4、然后寫一個(gè)方法遍歷hashmap,拼接成字符串格式為apikey=456appid=123secretkey=789timestamp=1389379498
然后對(duì)該字符串進(jìn)行encoded編碼,輸出格式為apikey=456appid=123secretkey=789×tamp=1389379498
5、通過(guò)java中HMAC-SHA1算法加密該字符串,$secretKey為安全密鑰。
6、再通過(guò)base64_encode加密第5步產(chǎn)生的字符串。這是最終sig結(jié)果。
你這不好單獨(dú)翻??調(diào)用到太多其它方法了 , 打注釋的地方根據(jù)php函數(shù)的功能 改成java的就行了
private?static?boolean?check_password_db(String?nickname,String?password){
String?pwd=mysql_query("select?password?from?users?where?username="+nickname+"");?//mysql_query
String?sha_info;
if(mysql_num_rows(pwd)==1){???//mysql_num_rows(pwd)??php的函數(shù)
String?password_info=mysql_fetch_array(pwd);?//mysql_fetch_array(pwd);?
sha_info=explode("$",password_info[0]);?//explode("$",password_info[0]);
}else{
return?false;
}
if(sha_info[1]=="SHA"){
String?salf=sha_info[2];
String?sha256_password=hash("sha256",password);?//hash();
sha256_password+=sha_info[2];
if(strcasecmp(trim(sha_info[3]),hash("sha256",sha256_password))==0){?//strcasecmp
return?true;
}else{
return?false;
}
}
}
沒法轉(zhuǎn)的,這個(gè)php中調(diào)用了不少外部對(duì)象,沒人能猜到那些是什么內(nèi)容的。
public?class?SimpleCrypto?{?
public?static?String?encrypt(String?seed,?String?cleartext)?throws?Exception?{?
byte[]?rawKey?=?getRawKey(seed.getBytes());?
byte[]?result?=?encrypt(rawKey,?cleartext.getBytes());?
return?toHex(result);?
}?
public?static?String?decrypt(String?seed,?String?encrypted)?throws?Exception?{?
byte[]?rawKey?=?getRawKey(seed.getBytes());?
byte[]?enc?=?toByte(encrypted);?
byte[]?result?=?decrypt(rawKey,?enc);?
return?new?String(result);?
}?
private?static?byte[]?getRawKey(byte[]?seed)?throws?Exception?{?
KeyGenerator?kgen?=?KeyGenerator.getInstance("AES");?
SecureRandom?sr?=?SecureRandom.getInstance("SHA1PRNG");?
sr.setSeed(seed);?
kgen.init(128,?sr);?//?192?and?256?bits?may?not?be?available?
SecretKey?skey?=?kgen.generateKey();?
byte[]?raw?=?skey.getEncoded();?
return?raw;?
}?
private?static?byte[]?encrypt(byte[]?raw,?byte[]?clear)?throws?Exception?{?
SecretKeySpec?skeySpec?=?new?SecretKeySpec(raw,?"AES");?
Cipher?cipher?=?Cipher.getInstance("AES");?
cipher.init(Cipher.ENCRYPT_MODE,?skeySpec);?
byte[]?encrypted?=?cipher.doFinal(clear);?
return?encrypted;?
}?
private?static?byte[]?decrypt(byte[]?raw,?byte[]?encrypted)?throws?Exception?{?
SecretKeySpec?skeySpec?=?new?SecretKeySpec(raw,?"AES");?
Cipher?cipher?=?Cipher.getInstance("AES");?
cipher.init(Cipher.DECRYPT_MODE,?skeySpec);?
byte[]?decrypted?=?cipher.doFinal(encrypted);?
return?decrypted;?
}?
public?static?String?toHex(String?txt)?{?
return?toHex(txt.getBytes());?
}?
public?static?String?fromHex(String?hex)?{?
return?new?String(toByte(hex));?
}?
public?static?byte[]?toByte(String?hexString)?{?
int?len?=?hexString.length()/2;?
byte[]?result?=?new?byte[len];?
for?(int?i?=?0;?i??len;?i++)?
result[i]?=?Integer.valueOf(hexString.substring(2*i,?2*i+2),?16).byteValue();?
return?result;?
}?
public?static?String?toHex(byte[]?buf)?{?
if?(buf?==?null)?
return?"";?
StringBuffer?result?=?new?StringBuffer(2*buf.length);?
for?(int?i?=?0;?i??buf.length;?i++)?{?
appendHex(result,?buf[i]);?
}?
return?result.toString();?
}?
private?final?static?String?HEX?=?"0123456789ABCDEF";?
private?static?void?appendHex(StringBuffer?sb,?byte?b)?{?
sb.append(HEX.charAt((b4)0x0f)).append(HEX.charAt(b0x0f));?
}?
}
try { MapString, String myMap= new HashMapString, String(); myMap.put("location",BNET_SOAP_URL); myMap.put("uri",BNET_SOAP_NAMESPACE); myMap.put("trace","1"); myMap.put("exceptions","1"); SoapClient bnet_client = new SoapClient(null,myMap); } catch (Exception exc) { throw new Exception(bnet_streamingno,null,exc,EXCEPTION_CONNECT_FAILURE) } 1 SoapClient方法你要自己先實(shí)現(xiàn) 2 Exception 參數(shù)要你自己再修改