PHP程序下如何取得APK签名以及验证是否一致
近期的需要取到APK的签名,以此来比对开发者上传的APK软件是否与原创APK的签名一致,以此保护正版APK软件的权益。同时避免像破解,汉化之类的 软件,覆盖在线的正版。所以这个功能需求还是很有必要实现的。本人对JAVA不太懂,开始想是不是能通过PHP技术来解决这个问题。但是通过查找各方面的 资料,没有找到好的办法。
最后转而去先了解了一下JAVA对包签名原理,再通过JAVA方面去找答案,最终是解决了这个问题。可是这样解决的方法,并不是 我期待的。我很希望会有更加简洁的方法实现,如果有更好解决的方案的朋友,可以留言给我。希望多交流。
下面就讲一下取比对APK签名一致的步骤,总的步骤先归纳如下几点,然后我分别做解释:
1.在服务器上安装JDK,使用keytool命令生效。
2.分别到取到二个APK包的证书指纹。
3.通过指纹信息,对比是否相等,判断是否为同一软件。
现在按上面给出的思路,来执行操作就可以。我们接着往下走:
第一步:在CentOS服务器下安装JDK,让keytool命令生效可以使用。
a.下载适合贵公司服务器的JDK版本。
下载址址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html
我测试的时候,下载的是:jdk-6u29-linux-x64.bin 。
[root@web-1 home]# wget http://download.oracle.com/otn-pub/java/jdk/6u29-b11/jdk-6u29-linux-x64.bin
b.安装并配置JDK.
[root@web-1 home]# ./jdk-6u29-linux-x64.bin [root@web-1 home]# mv jdk1.6* /usr/local/java [root@web-1 home]# cat >> /etc/profile << EFF ######################################## JAVA_HOME=/usr/local/java JRE_HOME=\$JAVA_HOME/jre CLASSPATH=:\$JAVA_HOME/lib:\$JRE_HOME/lib PATH=\$JAVA_HOME/bin:\$JRE_HOME/bin:\$PATH
unzip -p mumayidianzishichang_Mumayi_Market_V1.4_mumayi_91db5.apk META-INF/CERT.RSA | keytool -printcert | grep SHA1
输出如下:
[root@web-1 1]# unzip -p mumayidianzishichang_Mumayi_Market_V1.4_mumayi_91db5.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
MD5: 19:2A:5C:11:3E:72:A0:A1:A1:10:A3:BE:C3:9C:D5:32
[root@web-1 1]# unzip -p mumayidianzishichang_Mumayi_Market_V1.4_mumayi_91db5.apk META-INF/CERT.RSA | keytool -printcert | grep SHA1
SHA1: 91:83:AF:08:B5:00:88:85:E6:4C:E9:41:4E:3B:06:EC:51:E8:F8:83
Signature algorithm name: SHA1withRSA
PHP之友评论