linux系統上php執行apk簽名的方法
當時為應法國客戶的需求做的簽名伺服器,伺服器當時我是用php和thinkphp 架構做的。這塊我就不多講了,不懂得同學可以自行百度學習。我主要講我在實作簽名伺服器的算法和思路。
廢話不多說,直接上代碼:
private function signature(
$filepath,$apkname,$keystore,$aliasName,$suess,$keystorepass){
if(file_exists($filepath.$apkname) && file_exists($filepath.$keystore)){//判斷檔案是否存在
//$decod =json_decode($json);
// echo $json;
// $file = fopen($_SERVER['DOCUMENT_ROOT']."/data.php",'w+');
//fwrite($file, $json);
//fclose($file)
mkdir($filepath."test/");//建立路徑
chmod($filepath."test/",0777);//給檔案夾賦權限
$sudounzip = system("unzip ".$filepath.$apkname." -d ".$filepath."test"); //系統執行liunx指令解壓Apk到test檔案夾下
$test=$filepath."test";//
//删除test檔案夾下的舊的簽名檔案
$removeMeta = system("rm -rf ".$test."/META-INF");
//退出檔案夾将删除後的apk檔案打包
$zipapk = system("cd ".$filepath."test/ && zip -q -r sigalg_".$apkname." ./*");
//修改打包後的apk檔案名
$removeapp=system("cd ".$filepath."test/ && mv sigalg_".$apkname." ".$filepath."sigalg_".$apkname);
//删除舊的無用檔案
$remvtest=system("rm -rf ".$test);
$rmsigalg = system("rm -rf ".$filepath.$apkname);
//進行系統簽名
$result = system("jarsigner -verbose -keystore ".$filepath.$keystore." -storepass ".$keystorepass." -signedjar ".$filepath."signed_".$apkname." -digestalg SHA1 -sigalg MD5withRSA ".$filepath."sigalg_".$apkname." ".$aliasName);
//删除簽名前的檔案
$rmsigalg = system("rm -rf ".$filepath."sigalg_".$apkname."&& echo 1");
//更改簽名後的檔案名
$rename=system("cd ".$filepath." && mv signed_".$apkname." ".$filepath.$apkname."&& echo 1");
if($rename){
echo "<h1>SignatureAPK succeed!</h1>";
$suess = "y";
}else{
echo "<h1>SignatureAPK fail!</h1>";
$suess = "no";
}
//echo $rmsigalg."<br>";
}else{
echo "<h1> apk ro keystore can not exist !</h1>";
}
//echo $suess."llllllll";
//儲存各個變量名到session裡
$_SESSION["keyname"]= array($keystorepass,$aliasName,$suess);
}
其中的變量$filepath 檔案路徑、$apkname 要簽名的apk、 $keystore簽名檔案keystore、$aliasName别名、$suess成功辨別、$keystorepass簽名檔案keystore對應的簽名密鑰