linux系统上php执行apk签名的方法

来源:互联网 发布:软件系统设计方案 编辑:程序博客网 时间:2024/05/21 15:05

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对应的签名密钥

原创粉丝点击