天天看點

linux系統上php執行apk簽名的方法

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對應的簽名密鑰