先了解PHP的基本語(yǔ)言結(jié)構(gòu),然后去嘗試讀懂PHP項(xiàng)目的代碼,然后就按著代碼功能,用JAVA語(yǔ)言重寫(xiě)一遍就是了,暫不知道有直接從PHP代碼轉(zhuǎn)成JAVA的工具。。。
成都創(chuàng)新互聯(lián)公司咨詢(xún)熱線:028-86922220,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁(yè)制作領(lǐng)域十年,包括成都展覽展示等多個(gè)領(lǐng)域擁有多年設(shè)計(jì)經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花!
/**
* 生成簽名
* @param string timestamp 時(shí)間戳
* @param string appSecret 合作商開(kāi)發(fā)者密鑰
* @param string nonce 隨機(jī)字符串
* @return string
*/
public String makeSignature (String timestamp,String appSecret,String nonce) {
String[] tmpArr = {timestamp, nonce, appSecret};
// 按值升序排序
Arrays.sort(tmpArr)
// 數(shù)組拼接為字符串
// 調(diào)用md5方法
return signature;
}
其他的都是方法調(diào)用, 根據(jù)需要編寫(xiě)就行
你這不好單獨(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;
}
}
}
php代碼沒(méi)幾行,信息量很大,翻譯成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ù)組沒(méi)有寫(xiě)下標(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、然后寫(xiě)一個(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é)果。