其他分享
首页 > 其他分享> > 2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week2

2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week2

作者:互联网

2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week2

目录

任务要求

Week2 任务安排

实践过程

我好像不知道什么是BouncyCastle

那怎么使用BouncyCastle嘞

配置方式

通过配置JRE环境,使其作为提供者提供相应的算法支持,在代码层面只需要指定要扩展的算法名称

1、 修改D:\IDEA\Java\jdk\jre\lib\security\java.security文件

security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

2、 将文件导入D:\IDEA\Java\jdk\jre\lib\ext目录下

3、 刚才上面修改了安装目录下的jdk文件夹里的内容,接下来对与jdk同目录下的jre文件夹进行相同的修改与导入

调用方式

1、 必须BouncyCastle提供的jar包bcprov-jdk15to18-165.jar放到classpath中

2、 Java标准库的java.security包提供了一种标准机制,允许第三方提供商无缝接入。我们要使用BouncyCastle提供的RipeMD160算法,需要先把BouncyCastle注册一下:

2、 在需要使用加密的代码中导入以下两个类

import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

3、 在初始化密钥工厂、密钥生成器等引擎前调用如下代码:

//加入BouncyCastleProvider的支持
Security.addProvider(new BouncyCastleProviderrr());

###############或者使用以下方式###############
MessageDigest md = MessageDigest.getInstant("MD4","BC"); 
//每个提供者都有简称,Bouncy Castle提供者的简称为BC

据说使用BC Provider建CA无敌宇宙巨简单

1、 在所有的此类程序的开头,都都必须有:Security.addProvider(new BouncyCastleProvider());
这是为啥捏?将BouncyCaslte的Provider添加到系统中,这样以后系统在运行相关程序的时候调用的就是这个Provider中的加密算法。

2、 建立CA首先要有自己的一对公钥和私钥叭

3、 怎么安全地存储公私钥嘞?

    //公私钥的存储
    byte[] priBytes = privateCrtKey.getEncoded();
    //使用Base64再次进行编码
    String priData = Base64.encode(priBytes);

回归到正题:证书转换!

PEM->PFX

前提摘要

具体思路

	//使用BC提供的Pemreader读证书
	PemReader pemReader = new PemReader( new FileReader( "E:\\认真的侯颖好好看(课内)\\大三下\\课设\\certificate\\test.pem" ) );
    PemObject pemObject = pemReader.readPemObject();
    byte cert[] = pemObject.getContent();

	CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");//获取工厂实例
    Certificate certificate = certificateFactory.generateCertificate(new ByteArrayInputStream(cert));//用文件流读入证书
    X509Certificate x509Certificate = (X509Certificate)certificate;
    System.out.println(x509Certificate);

	PemReader pemReader_key = new PemReader(new FileReader( "E:\\认真的侯颖好好看(课内)\\大三下\\课设\\certificate\\test_key.pem" ));
    PemObject pemObject1 = pemReader_key.readPemObject();
    byte[] keyByte = pemObject1.getContent();
	//加密私钥
    PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyByte);//使用给定的编码密钥创建新的 PKCS8EncodedKeySpec
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");//创建一个密钥工厂对象就可以按照要求生成一个RSA私钥
    PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
	X509Certificate[] chain = new X509Certificate[1];//证书链的长度为1
    chain[0]= x509Certificate;

关键代码

遇到问题

参考链接

类 X509Certificate
Bouncy Castle 配置
BouncyCastle配置

标签:编码,课程设计,BouncyCastle,证书,BC,2020,new,私钥
来源: https://www.cnblogs.com/orii/p/12763793.html