实际上获取的不是应用的签名,而是签署apk的keystore文件的签名(Signature)。
签名值主要有三种类型:MD5、SHA1和SHA25。
不同的第三方库要的值可能不同,比如微信开放平台要的是md5值,而高德地图要的则是SHA1值。
通过JDK的keytool命令来导出。
比如,我有一个名为“luckyshane.debug.keystore.jks”的keystore文件,有个别名alias为"debug",密码为“150706”,而密钥的存储密码storePassword也为"150706",那么使用下面的命令打印出相关信息:
keytool -list -v -keystore ./luckyshane.debug.keystore.jks -storepass 150706 -alias debug -keypass 150706
打印出的结果如下:
别名: debug
创建日期: 2019-1-2
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=luckyshane, OU=cmiot, O=cmiot, L=Chengdu, ST=Sichuan, C=CN
发布者: CN=luckyshane, OU=cmiot, O=cmiot, L=Chengdu, ST=Sichuan, C=CN
序列号: 603ae5f8
有效期为 Wed Jan 02 09:54:24 CST 2019 至 Sun Dec 27 09:54:24 CST 2043
证书指纹:
MD5: 88:74:26:2E:0F:32:20:66:ED:52:8E:1F:B8:04:EA:70
SHA1: 1E:DE:35:DD:F8:D8:D5:CB:D3:4F:EB:79:B6:9E:DF:03:21:09:53:32
SHA256: 51:AC:CC:7B:5B:66:02:59:C5:50:41:7A:CA:CE:CD:EA:F9:93:CE:AC:55:4A:9A:F1:E0:30:D4:67:21:64:CC:69
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: CE 06 EC 00 C8 94 E7 BE 7F 50 B3 3E 7F 57 0F 9F .........P.>.W..
0010: 5A A1 77 DA Z.w.
]
]
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore ./luckyshane.debug.keystore.jks -destkeystore ./luckyshane.debug.keystore.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
- 微信开放平台要的签名为md5值,去掉中间的冒号。微信的文档里面用的是小写,暂没测试过是否一定要转换成小写。
- 以上为:8874262E0F322066ED528E1FB804EA70
- QQ互联平台同微信
- 高德地图用的是SHA1值
- 以上为:1E:DE:35:DD:F8:D8:D5:CB:D3:4F:EB:79:B6:9E:DF:03:21:09:53:32