Android/Java中解析.crt证书文件的公钥(public key)---Android拓展篇


Android/Java中解析.crt证书文件的公钥(public key)
——读取.crt文件证书(获取key)


文 | 莫若吻     

1.问题描述

1)首先,在做项目时为加强安全性,需要读取 x.crt证书文件获取公钥;此时使用普通的IO流读取文件是行不通的,通过学习,发现用下面的方法可以完美解决,分享出来,希望对大家有帮助。
2)在使用的过程中,遇到了一个bug:
java.security.cert.CertificateException: com.android.org.conscrypt.OpenSSLX509……
bug信息太长,后面的省略了,总结异常关键点:
CertificateException - OpenSSLX509CertificateFactory$ParsingException
后来发现方法中需要多传一个"BC",就可以解决问题:
eg:CertificateFactory.getInstance("X.509","BC"); 


2.解决问题

代码如下:
/*
获取公钥key的方法(读取.crt认证文件)
*/
private static String getKeyFromCRT(){
        String key="";
        CertificateFactory certificatefactory;
        X509Certificate Cert;
        InputStream bais;
        PublicKey pk;
        BASE64Encoder bse;
        try{
			//若此处不加参数 "BC" 会报异常:CertificateException - OpenSSLX509CertificateFactory$ParsingException
            certificatefactory=CertificateFactory.getInstance("X.509","BC");
			//读取放在项目中assets文件夹下的.crt文件;你可以读取绝对路径文件下的crt,返回一个InputStream(或其子类)即可。
            bais = this.getAssets().open("xxx.crt");
            Cert = (X509Certificate) certificatefactory.generateCertificate(bais);
            pk = Cert.getPublicKey();
            bse = new BASE64Encoder();
            key=bse.encode(pk.getEncoded());
//            Log.e("源key-----"+ Cert.getPublicKey());
//            Log.e("加密key-----"+bse.encode(pk.getEncoded()));
        }catch(Exception e){
            e.printStackTrace();
        }
        key=key.replaceAll("\\n", "").trim();//去掉文件中的换行符
        return key;
    }




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值