关于Android签名,我所了解的这些
背景
最近的一个项目集成了百度定位SDK,创建应用提供了包名和证书指纹(MD5、SHA-1、SHA-256),其实刚接触Android的时候就已经使用过了,现在回头来整理一下,供后面学习参考。
使用jdk自带的keytool工具
证书在手的情况,可以直接使用命令查看证书信息
keytool -list -v -keystore [keystore或jks文件路径] -storepass [密钥库密码]
比如一下操作
deMacBook-Pro:~ keytool -list -v -keystore /Users/……/XX.keystore
输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: landi
创建日期: 2013年1月23日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=landi, OU=landicorp, O=landicorp, L=Fuzhou, ST=Fujian, C=86
发布者: CN=landi, OU=landicorp, O=landicorp, L=Fuzhou, ST=Fujian, C=86
序列号: 50feb7b1
生效时间: Wed Jan 23 00:00:49 CST 2013, 失效时间: Tue May 26 00:00:49 CST 3012
证书指纹:
SHA1: 04:AD:77:B5:7B:D9:4A:C5:E7:99:5F:76:52:C0:59:0C:A3:39:A5:D0
SHA256: AB:C8:BC:3F:39:23:1F:EC:AD:ED:C7:2F:BD:63:F4:9E:F5:EB:C9:CC:03:81:FA:32:7C:6F:7F:24:D0:FE:FB:10
签名算法名称: SHA1withRSA (弱)
主体公共密钥算法: 1024 位 RSA 密钥 (弱)
版本: 3
*******************************************
手中只有已签名的APK包
之间有个项目是别人维护的,接手到源码之后发现没有签名文件,对方也不是主负责该项目的,需要去找对应的签名文件,所以先去应用市场下载一个apk包,我们知道apk打包之后包内会有RSA文件,这个是证书公钥,用来给系统验证apk包签名有效性的,且不同的私钥对应不同的公钥。换句话言之,不同的私钥签名的APK公钥也必不相同。所以我们可以根据公钥的对比,来判断私钥是否一致。
1.将apk修改后缀名.zip后进行解压
2.找到RSA文件 apk包/META-INF/xxx.RSA
3.使用命令读取RSA的信息:
keytool -printcert -file [RSA文件路径]
命令介绍
keytool -printcert [OPTION]...
打印证书内容
选项:
-rfc 以 RFC 样式输出
-file <filename> 输入文件名
-sslserver <server[:port]> SSL 服务器主机和端口
-jarfile <filename> 已签名的 jar 文件
-v 详细输出
操作如下:
keytool -printcert -file E:\....\M
TA-INF\CERT.RSA
所有者: CN=landi, OU=landicorp, O=landicorp, L=Fuzhou, ST=Fujian, C=86
发布者: CN=landi, OU=landicorp, O=landicorp, L=Fuzhou, ST=Fujian, C=86
序列号: 50feb7b1
有效期开始日期: Wed Jan 23 00:00:49 CST 2013, 截止日期: Tue May 26 00:00:49 CST
012
证书指纹:
MD5: 42:3E:DF:F6:B5:15:9B:1B:8E:30:B8:67:E6:AD:E8:CB
SHA1: 04:AD:77:B5:7B:D9:4A:C5:E7:99:5F:76:52:C0:59:0C:A3:39:A5:D0
SHA256: AB:C8:BC:3F:39:23:1F:EC:AD:ED:C7:2F:BD:63:F4:9E:F5:EB:C9:CC:03:
1:FA:32:7C:6F:7F:24:D0:FE:FB:10
签名算法名称: SHA1withRSA
版本: 3
通过对比SHA1或者SHA256的值看是否是对应的签名文件。