java 用bouncycastle 生成pem格式的rsa

news/2024/7/8 9:29:35/文章来源:https://www.cnblogs.com/zhian/p/18285811

maven  pem.xml

<dependency>  <groupId>org.bouncycastle</groupId>  <artifactId>bcprov-jdk15on</artifactId>  <version>1.70</version> <!-- 请根据需要检查最新版本 -->  
</dependency>

 

java 用bouncycastle 生成pem格式的rsa

import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;  
import org.bouncycastle.asn1.x500.X500Name;  
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;  
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;  
import org.bouncycastle.cert.X509v1CertificateBuilder;  
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;  
import org.bouncycastle.cert.jcajce.JcaX509v1CertificateGenerator;  
import org.bouncycastle.jce.provider.BouncyCastleProvider;  
import org.bouncycastle.openssl.PEMKeyPair;  
import org.bouncycastle.openssl.PEMParser;  
import org.bouncycastle.openssl.jcajce.JcaPEMWriter;  
import org.bouncycastle.operator.ContentSigner;  
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;  import java.io.ByteArrayOutputStream;  
import java.io.IOException;  
import java.io.StringWriter;  
import java.math.BigInteger;  
import java.security.*;  
import java.security.cert.X509Certificate;  
import java.util.Date;  public class RSAGenerator {  static {  Security.addProvider(new BouncyCastleProvider());  }  public static void main(String[] args) throws Exception {  KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");  keyPairGenerator.initialize(2048);  KeyPair keyPair = keyPairGenerator.generateKeyPair();  // 保存公钥为PEM格式  StringWriter publicKeyWriter = new StringWriter();  try (JcaPEMWriter pemWriter = new JcaPEMWriter(publicKeyWriter)) {  pemWriter.writeObject(keyPair.getPublic());  }  String publicKeyPem = publicKeyWriter.toString();  // 保存私钥为PKCS#8 PEM格式  StringWriter privateKeyWriter = new StringWriter();  try (JcaPEMWriter pemWriter = new JcaPEMWriter(privateKeyWriter)) {  pemWriter.writeObject(keyPair.getPrivate());  }  String privateKeyPem = privateKeyWriter.toString();  System.out.println("Public Key (PEM):");  System.out.println(publicKeyPem);  System.out.println("Private Key (PKCS#8 PEM):");  System.out.println(privateKeyPem);  }  
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738762.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware vSphere Tanzu部署_16_TKC集群节点VM密码获取

SupervisorControlPlaneVM密码获取 通过SSH方式登录vcentervcenter开启SSH服务通过SSH工具登录vcenter执行获取密码脚本在vcenter shell模式下执行/usr/lib/vmware-wcp/decryptK8Pwd.py命令WARNING! The remote SSH server rejected X11 forwarding request. Connected to serv…

空洞文件

实际上这些数据并没有被存储在磁盘上。当创建一个空洞文件时,文件系统会记录这些“空洞”,但并不会在物理介质上实际分配和保存未使用的空间,从而节省了实际的存储空间。 举例来说,如果你创建一个大小为1GB的空洞文件,其中写入了大量的零字节据,实际上只有少量的数据(例…

Box,一个字典操作python库

Box介绍 Box 是一个让字典操作变得异常简单与直观,支持通过属性访问字典内容的库。特点概述属性访问Box 允许用户像访问对象属性一样访问字典的值,提升了代码的可读性和易用性。无缝嵌套自动将嵌套的字典转换为 Box 对象,使得处理复杂字典结构变得轻而易举。灵活性强支持多种…

(四)JS逆向——中国观鸟网

爬取观鸟网的信息 有sign值,timestamp和requestid,要看这些值是怎么生成的 载荷有加密的数据 返回值也经过加密 搜索requestid,找到了eval加密的代码,通过解密,就能找到生成这些值的代码段 代码格式化后,找到了这几个值的生成位置 requestid的生成是随机值,timestamp是时…

vscode插件安装好用

本文来自博客园,作者:prince11,转载请注明原文链接:https://www.cnblogs.com/prince11/p/18285764

java List子父级集合转List树工具类

java List集合转Tree集合 1.创建泛型工具类package com.demo;import org.springframework.util.CollectionUtils;import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util…

博客屋网址导航自适应主题php源码

博客屋网址导航自适应主题php源码v1.0是一个以PHP+MySQL进行开发的网址导航源码。模板源码后台开源无加密,可二次开发,前端响应式自适应多端屏幕。主题源码适合个人建站技术,个人博客论坛,个人日记分享等个人网站内容。站长也可以修改成其他行业的内容目录导航。演示地址ht…

【vue】为什么v-for中需要一个key呢?

通过key值来区分循环中的子内容

在wsl中部署puppeteer的相关笔记

二. 缺少依赖问题反复提示缺少各种依赖,到处搜刮一顿操作之后是没问题了,但也不知道哪些是无所谓的 apt install -y gconf-service libc6 libcairo2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libstdc++6 libx11-6 apt inst…

《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(七)

此系列答案配套《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》一书相关内容。所有内容为博主个人编辑,仅作参考学习交流之用,转载请注明出处。如发现错误,请联系博主及时勘误。如有侵权行为,博主将立即下架全部内容。声明:此系列答案配套《计…

【设计模式(二)】创建型模式--抽象工厂模式

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。抽象工厂模式也是⼀种创建型设计模式,提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 抽象工厂…

[Java] Java 关键字 : transient

0 序 Java中的transient关键字,transient是短暂的意思。对于transient修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。 1 序列化Java中对象的序列…

告别 .NET 7,支持将于 5 月结束——我们几乎不认识你

微软 .NET 7 软件框架的支持将于 5 月结束,这距离其 2022 年发布仅过去 18 个月——这提醒我们,长期更新时代正在成为过去。 .NET 7 于 2022 年 11 月 8 日首次亮相,与其前身不同的是,它是一个标准期限支持 (STS) 版本,这意味着它的支持期为 18 个月。.NET 6 和 .NET 8 都…

在Ubantu22.04中运行ORB_SLAM3

在Ubantu22.04中运行ORB_SLAM3 一、概述 ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。从第一版的单目相机系统,到第二版加入了对stereo以及RGBD camera的支持,再到目前最新版本的orb-slam整合了visua…

gitlab 解锁账号

现象 登录gitlab后显示 账号被锁,登录方式AD域 管理员后台查看账号 如果是在gitlab导致的锁,那么账号显示的就是Blocked,如果是LDAP导致就是LDAP Blocked,并且后者无法在gitlab UI界面解锁 解锁登录控制端 gitlab-rails console搜索用户user = User.find_by_email("m…

centos 7 ip地址配置

然后输入如下命令: /etc/init.d/network restart我只想安静地学习,捡拾前人的牙慧,默默强大如此弱小的我...

手把手教你解决spring boot导入swagger2版本冲突问题,刘老师教编程

手把手教你解决spring boot导入swagger2版本冲突问题本文仅为个人理解,欢迎大家批评指错首先Spring Boot 3 和 Swagger 2 不兼容。在 Spring Boot 3 中,应该使用 Springdoc 或其他与 Spring Boot 3 兼容的 API 文档工具来替代 Swagger 2。 Swagger 2 的依赖底层使用的是 java…

Linux(Centos7)安装Docker 社区(ce)版

安装准备 查看Linux系统版本是否为centos7 cat /etc/os-release确保系统内核为3版本以上 uname -a安装Docker 如之前安装过请卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker…

srpingboot 初识

依赖管理父项目(一直网上找)spring-boot-dependencies 决定了当前 springboot 预先配置的所有依赖及版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.4.RELEAS…

windows配置环境变量

前言 环境变量的目的是为了让为了终端简化命令行操作,使系统能够找到所需的程序和工具或文件,并优化系统的运行环境。 比如我有一个文件 D:\doc\a.txt ,如果我们打开终端打开此文件,则需要输入D:\doc\a.txt但是如果我们将D:\doc配置为环境变量,我们则可以直接终端中输入 a…