获取签名证书公钥、MD5- APP备案(Android)

209 阅读1分钟

关于证书相关备案信息,获取其实很简单,利用相关命令以及jadxAPP备案助手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();
    }
}