Android 获取签名公钥

来源:互联网 发布:scp linux 命令 编辑:程序博客网 时间:2024/05/16 04:45

[1].[代码] [Java]代码 跳至 [1]

?
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
45
46
47
48
49
publicclass GetPublicKey {
     
    /**
     * 获取签名公钥
     * @param mContext
     * @return
     */
    protectedstatic String getSignInfo(Context mContext) {
        String signcode = "";
        try{
            PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(
                    GetAppInfo.getPackageName(mContext), PackageManager.GET_SIGNATURES);
            Signature[] signs = packageInfo.signatures;
            Signature sign = signs[0];
 
            signcode = parseSignature(sign.toByteArray());
            signcode = signcode.toLowerCase();
        }catch(Exception e) {
            Log.e(Constants.TAG, e.getMessage(), e);
        }
        returnsigncode;
    }
 
    protectedstatic String parseSignature(byte[] signature) {
        String sign = "";
        try{
            CertificateFactory certFactory = CertificateFactory
                    .getInstance("X.509");
            X509Certificate cert = (X509Certificate) certFactory
                    .generateCertificate(newByteArrayInputStream(signature));
            String pubKey = cert.getPublicKey().toString();
            String ss = subString(pubKey);
            ss = ss.replace(",","");
            ss = ss.toLowerCase();
            intaa = ss.indexOf("modulus");
            intbb = ss.indexOf("publicexponent");
            sign = ss.substring(aa + 8, bb);
        }catch(CertificateException e) {
            Log.e(Constants.TAG, e.getMessage(), e);
        }
        returnsign;
    }
 
    publicstatic String subString(String sub) {
        Pattern pp = Pattern.compile("\\s*|\t|\r|\n");
        Matcher mm = pp.matcher(sub);
        returnmm.replaceAll("");
    }
}
0 0
原创粉丝点击