咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

Android获取签名的指纹

签名的指纹在对接一些平台会用到,如微信,高德等。

很久没用,忘记了,这里记录一下,方便以后使用

命令

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

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
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 = MessageDigest.getInstance("MD5");
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();