关于证书相关备案信息,获取其实很简单,利用相关命令以及jadx和APP备案助手APP都可以,但是如果是要在代码里面直接获取的话,我搜了网上一圈都没有,那么就得自己动手造轮子,经过一轮的测试,最终的java代码如下:
private void getPublicKey() {
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES)
Signature[] signatures = packageInfo.signatures
for (Signature signature : signatures) {
byte[] cert = signature.toByteArray()
InputStream input = new ByteArrayInputStream(cert)
CertificateFactory cf = CertificateFactory.getInstance("X.509")
X509Certificate x509Certificate = (X509Certificate) cf.generateCertificate(input)
String publickey = x509Certificate.getPublicKey().toString()
// 打印或使用公钥数据(16进制)
Log.d("PublicKey ====>", publickey);
int start = publickey.indexOf("modulus=")+ 8;
int end = publickey.indexOf(",", start);
publickey = publickey.substring(start, end);
Log.d("PublicKey =>2", publickey);
// 将长十六进制字符串转换为十进制字符串
BigInteger bigInteger = new BigInteger(publickey, 16);
String decimalString = bigInteger.toString();
Log.d("PublicKey =>3", decimalString);
}
} catch (PackageManager.NameNotFoundException | CertificateException e) {
e.printStackTrace();
}
}