签名的指纹在对接一些平台会用到,如微信,高德等。
很久没用,忘记了,这里记录一下,方便以后使用
命令
1
| $ keytool -list -v -keystore 签名文件
|
Debug默认的签名
Android Studio的默认Debug签名是在用户的 .android
目录中(如Windows下的:C:\Users\sam.android),文件名为 debug.keystore
1 2
| $ keytool -list -v -keystore debug.keystore 输入密钥库口令: (密码是android)
|
自定义签名
现在自定义签名是 *.jks
文件,这里为你打包apk所用的签名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| $ keytool -list -v -keystore alis.jks 输入密钥库口令: (密码是自己设的) 密钥库类型: jks 密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: honor 创建日期: 2019-12-12 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: CN=Dog, OU=Teng, O=GouQuan, L=Beijing, ST=China, C=CHN 发布者: CN=Dog, OU=Teng, O=GouQuan, L=Beijing, ST=China, C=CHN 序列号: 5647d295 有效期为 Thu Dec 12 10:51:28 CST 2019 至 Mon Dec 05 10:51:28 CST 2044 证书指纹: MD5: 6F:7F:E4:86:BC:F7:B4:F2:2E:B0:87:FA:8B:2E:06:99 SHA1: 48:93:C4:B5:E7:CB:1B:49:EA:B5:A6:08:C9:B1:8D:FC:5E:CB:A8:74 SHA256: 9E:28:9C:8F:A0:01:F7:55:B8:CA:0B:30:6D:B6:10:16:B5:E5:88:72:E5:31:60:6E:F5:25:C3:B5:09:A3:5D:13 签名算法名称: SHA256withRSA 主体公共密钥算法: 2048 位 RSA 密钥 版本: 3
扩展:
SubjectKeyIdentifier [ KeyIdentifier [ 0000: 3F F7 B4 C9 12 3F 34 F9 DB FF 27 E5 A0 6C B7 25 ?....?4...'..l.% 0010: E1 C0 06 72 ...r ] ]
******************************************* *******************************************
Warning: JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore alis.jks -destkeystore alis.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12 。
|
apk执行代码获取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| private static byte[] getApkPackageSignatures(Context context){ PackageInfo packageInfo; try { packageInfo = context.getPackageManager().getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES); byte[] bytes = packageInfo.signatures[0].toByteArray(); MessageDigest messageDigest; messageDigest = MessageDigest.getInstance("SHA256"); messageDigest.reset(); messageDigest.update(bytes); return messageDigest.digest(); }catch (NoSuchAlgorithmException | PackageManager.NameNotFoundException e) { e.printStackTrace(); } return null; }
|
大于等于P(28)版本
1 2 3 4 5
| packageInfo = context.getPackageManager().getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNING_CERTIFICATES);
byte[] bytes = packageInfo.signingInfo.getApkContentsSigners()[0].toByteArray();
|