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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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;
    }
目录
打赏
0
0
0
0
2
分享
相关文章
|
11天前
|
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
70 13
.NET 平台 SM2 国密算法 License 证书生成深度解析
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
免费通配符SSL证书不限制申请-2025最新渠道解析
在网络安全至关重要的今天,通配符SSL证书因其能保护主域名及所有二级子域名而备受青睐。本文解析2025年最新免费通配符SSL证书申请渠道,重点介绍JoySSL提供的不限量免费证书。通过简单步骤,用户可轻松申请并安装证书,确保网站安全。注意及时续签和政策变动,以保障长期稳定使用。
Java中Log级别和解析
日志级别定义了日志信息的重要程度,从低到高依次为:TRACE(详细调试)、DEBUG(开发调试)、INFO(一般信息)、WARN(潜在问题)、ERROR(错误信息)和FATAL(严重错误)。开发人员可根据需要设置不同的日志级别,以控制日志输出量,避免影响性能或干扰问题排查。日志框架如Log4j 2由Logger、Appender和Layout组成,通过配置文件指定日志级别、输出目标和格式。
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
54 15
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
19 0
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
76 6
【潜意识Java】期末考试可能考的高质量大题及答案解析
Java 期末考试大题整理:设计一个学生信息管理系统,涵盖面向对象编程、集合类、文件操作、异常处理和多线程等知识点。系统功能包括添加、查询、删除、显示所有学生信息、按成绩排序及文件存储。通过本题,考生可以巩固 Java 基础知识并掌握综合应用技能。代码解析详细,适合复习备考。
28 4
【潜意识Java】期末考试可能考的简答题及答案解析
为了帮助同学们更好地准备 Java 期末考试,本文列举了一些常见的简答题,并附上详细的答案解析。内容包括类与对象的区别、多态的实现、异常处理、接口与抽象类的区别以及垃圾回收机制。通过这些题目,同学们可以深入理解 Java 的核心概念,从而在考试中更加得心应手。每道题都配有代码示例和详细解释,帮助大家巩固知识点。希望这些内容能助力大家顺利通过考试!
28 0
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
141 2

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等