RSA pkcs1与pkcs8 java获取私钥

2023-11-13

RSA  pkcs1与pkcs8  java获取私钥

目录

RSA  pkcs1与pkcs8  java获取私钥

获取秘钥

获取pkcs1 格式秘钥

获取pkcs8格式秘钥

读取秘钥信息

解密


获取秘钥

maven依赖

	<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk16</artifactId>
			<version>1.46</version>
	</dependency>

获取pkcs1 格式秘钥

    public  static  PrivateKey  getPKCS1Key(byte[] privateKeyBytes )  throws Exception{
        // 取得私钥  for PKCS#1
        RSAPrivateKeyStructure asn1PrivKey = new RSAPrivateKeyStructure((ASN1Sequence) ASN1Sequence.fromByteArray(privateKeyBytes));
        RSAPrivateKeySpec rsaPrivKeySpec = new RSAPrivateKeySpec(asn1PrivKey.getModulus(), asn1PrivKey.getPrivateExponent());
        KeyFactory keyFactory=  KeyFactory.getInstance("RSA");
        PrivateKey priKey= keyFactory.generatePrivate(rsaPrivKeySpec);
        return priKey;
    }
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCBvjdB7jtFh1t0Y+swHSqs9Kkii3ydKXPtvixVm88vxFY3rWha
UFCXV/RCYo1PEaATfkjxEllH4+BeMgROgK52muv/xMsl5tvXNPwGbsDH20MhZtkD
blbGA4q26HthMRuKToG2TcufqPmvkR18J6x8KtnKwPX9Wvi0DZdJVE7FFQIDAQAB
AoGAD7S0oL0TnMOZfRn5Zw4o094cOWvUTnwtpfqPCF//sUMdwsixqLkvQFrr3Ttr
6sXx8Fopv1Ee0LaTuyNn5Q7rz5AAauDHQBTFLInU01G3dls/aeTEF3ziJLcHIBg/
9W/AAHyHGG1NdhDlIzISl75tViK2d57hAWHu8TC9QeNf7yMCQQDYwneTwI8EtuuN
Z/6T3ZGj2sZPjjSF6Vjz41g9/+RPawpv1qeYddo04f0fOyWdpYZxXTF863NgIr5j
IJnXKxJnAkEAmTsKmOidj+7DtNQor8SioYNT10nlgzrkC3Kr/BIkZTd8aog90sBL
AAyojEENHLdJntBOz9K03cSMA4qwDJwXIwJANyou0oyUGWgQRLmtwaYHFcNs6vxP
A7GicNdwMr84NLoSOupPVu7PbNwC1nrwFNH2iE1mddtaTqIpAANhA7CziwJBAIQc
9KkbvmXPzesGFUJevn2VFl+Dth/sUZxRNVmzZq/iJCJR70PbSY70Wwn6OEzu9sm3
/ouOtySSBsoy9FEa75MCQG0pdaiq66/yrkZxv+EZI8J+2K08RERS15Eg8gIz08S2
YN052V2/aYIL10I3Gczr+maGP+5SCVVsDf6Sh2zRi5g=
-----END RSA PRIVATE KEY-----

获取pkcs8格式秘钥

    public  static  PrivateKey  getPKCS8Key(byte[] privateKeyBytes )  throws Exception{

        // 取得私钥  for PKCS#8
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
        return priKey;
    }
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANl2Zy1NTndVMeHH
5bhswu1zGrYrutc/fod3ajOlTwa7d5ZBR7XjieKj7go/6Q8AWS9k5Oes1SGEdcB8
jX62MrXsSrHXv/6mDNoEN9+vA8stLy+uOWW3LGCPjMqugbT0+7q3evX0VW/LS1/v
WIAWAqcodlW6unTbDh4g/Ul7TsgPAgMBAAECgYAg1U64uU5amCNi6pKVqN45icKD
tNCOBUkuXOpNB+2Jn65rokmYfdVowcWECKhAmpXcoQgqrp6zY9N/j46xjgLTy3Og
rERBYHJqotuWXRW1fjcwOe8VGN+LNHgddD6kaygiC+Aw9G2hcpYEylZMLAdObUPb
oOB9ADHFY1QG6aeEYQJBAP9eJ9HI6flQ0M7M2woEDQkI9hv4YLeckqNpE3uGgukM
GwmRbmmlpiDq9qeTZA0NBMBE8voMorK/GDJ5SRBc+78CQQDaADlo87NnsDyBSzdV
6FBep0LhxoQ12YlcuYO0i0Hv4HvLjhPagu31NhNTVRJ0PKPrLHkPlaJUOAIZoghK
fYexAkAMLzrpKJP5YGDGLUIaRT01/CZ6CSzcNe1NPLtAPpfKdNhpaXYCNnQpx+xC
7KZudPuQDPom8illK/cEmYLh8/3TAkEAmf3Kj/6F3lq5gsN1BTQjgZk5P28ReVB/
HYbWKDSukRnLmNB16cbO/IYERLs1W/Jx/+/cXEvg7QjbQuwYWzYtIQJACHdgJjLs
oe8oBSp/rCOlZQtxvNPwyeZAV41QiuylOJs/tXPhOxCkxYh7U7JDWFPv4bYkp7Jy
LcKAI63M4NvGzg==
-----END PRIVATE KEY-----

读取秘钥信息

        BASE64Decoder base64decoder = new BASE64Decoder();
        BufferedReader  br8 = new BufferedReader(new FileReader("E:\\1.txt"));
        String s = br8.readLine();
        String str = "";
        s = br8.readLine();
        while (s.charAt(0)!= '-'){
            str += s + "\r";
            s = br8.readLine();
        }
        byte[] buffer8 =base64decoder.decodeBuffer(str) ;
        br8.close();

解密

   public static   String  decrypt(PrivateKey Key,String content ) throws  Exception {
      RSAPrivateKey privateKey = (RSAPrivateKey) Key;


          Cipher cipher = Cipher.getInstance("RSA");
          cipher.init(Cipher.DECRYPT_MODE, privateKey);
          System.out.println("provider: {}" + cipher.getProvider().getClass().getName());


          byte[] data = Base64.decodeBase64(content.getBytes());
          int inputLength = data.length;
          ByteArrayOutputStream out = new ByteArrayOutputStream();
          int offset = 0;
          byte[] cache;
          int i = 0;
          byte[] tmp;
          while (inputLength - offset > 0) {
              if (inputLength - offset > 256) {
                  cache = cipher.doFinal(data, offset, 256);
              } else {
                  cache = cipher.doFinal(data, offset, inputLength - offset);
              }
              out.write(cache);
              i++;
              offset = i * 256;
          }
          byte[] decryptedData = out.toByteArray();
          out.close();
          return new String(decryptedData);

  }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RSA pkcs1与pkcs8 java获取私钥 的相关文章

随机推荐

  • 仅四步教你快速接入Seata分布式事务

    简介 Seata 是一款开源的分布式事务解决方案 致力于提供高性能和简单易用的分布式事务服务 Seata 将为用户提供了 AT TCC SAGA 和 XA 事务模式 为用户打造一站式的分布式解决方案 本篇文章将以视频与文字介绍的形式 指引你
  • Qt+SDL播放YUV视频文件

    播放一个yuv420p格式的文件 yuv的格式与rgb格式的存储方式不同 yuv数据是 yyyyyyyy uu vv 的存储 rgb是rgba rgba rgba 存储 同样一帧图像 yuv420会比rgb数据更小 读取时就要注意数据存储格
  • 关于文件读写操作中ios::app与ios::ate的区别

    前几天在用到对文件操作的时候上网查询了一下 当时只看到说在文件末尾继续写是用ios ate 结果当然是屡试爽了 后来又仔细看了一下文章 才发现ios app 用这个果然就可以了 Google了一下两者的区别 出现了一个表格 还是说的很详细吧
  • 数据分析36计(17):Uber的 A/B 实验平台搭建

    往期系列原创文章集锦 数据分析36计 16 和 A B 测试同等重要的观察性研究 群组研究 VS 病例 对照方法 数据分析36计 15 这个序贯检验方法让 A B 实验节约一半样本量 数据分析36计 14 A B测试中的10个陷阱 一不注意
  • C语言基础(底层、运算符)

    一 C语言底层 程序 算法 数据 1 整型 字符类型 字符常量 a 一个字符 字符串常量 abcd 多个字符 字符变量 1 定义字符 有无符号 类型 变量 2 引用变量 引用变量的内容 2 浮点型 1 浮点型常量 十进制 3 14 科学表示
  • Aix上的压缩与解压

    1 compress生成一个后缀为 Z的压缩文件 可用compress d或者uncompress解压后缀为 Z的文件 若压缩的文件是文本文件 可用zcat直接查看压缩文件 不需要先解压 再用cat 2 gzip生成一个后缀为 gz的压缩文
  • python backtrace注意事项

    1 当python异常时 web服务器一般会记录异常日志 比如uwsgi 如果用python自带的web server 那么启动时要把输出重定向一下 2 有时要把异常backtrace与普通日志记录在一起 可以在logging xxx 函数
  • js浮点数计算精度问题

    js语言在进行数字计算时会发生计算精度失真的情况 因为javascript使用了IEEE 745浮点数表示法 在运算是会将浮点数转换为二进制数字计算 例如 0 1 gt 0 0001100110011001 无限 0 2 gt 0 0011
  • 【干货】今日头条的新闻推荐算法原理

    信息越来越海量 用户获取信息越来越茫然 而推荐算法则能有助于更好的匹配海量内容和用户需求 使之更加的 有的放矢 为让产业各方更好的了解算法分发的相关技术和原理 我们特整理了当下最具影响力的平台的相关干货 和各方分享 本期微信 我们将推荐影视
  • pip安装pytorch 清华镜像

    每次要搭配环境的时候就头大 资源基本是国外 下载起来特别慢 有些连服务器都访问不了 不用镜像 按照书上或者网上的正常流程搭配环境 基本上都是以超时告终 然后就在网上疯狂找资源 网上有人说是个程序员都会翻墙 我可能是个假的程序员吧 什么都不会
  • Arthas watch命令使用

    目录 属性遍历深度 1 watch 类全限定名 方法名 遍历深度为1的入参 对象 返回信息 2 watch 类全限定名 方法名 x n 观察遍历深度为n的入参 对象 返回信息 观察事件点 1 watch 类全限定名 方法名 params x
  • Python爬虫从入门到精通:(39)增量式爬虫_Python涛哥

    概念 检测网络数据更新的情况 以便于爬取到最新更新出来的数据 实现核心 去重 实战中去重的方式 记录表 记录表需要记录什么 记录的一定是爬取过的相关信息 例如某电影网 爬取过的相关信息 每一部电影详情页的url 只需要使用某一组数据 该组数
  • 一个产品的商业目标应该从哪些方面制定?

    产品面向社区治理相关服务 比如信息发布 事件调解 活动发布 数据统计等等 但感觉缺少合理的商业策略和商务模式 文心一言 一个产品的商业目标应该从以下几个方面制定 市场定位 确定你的产品的目标客户是谁 这可以是你的社区治理服务所面向的人群 也
  • 【数学公式】Mathpix和MathType等等

    MathML MathML指 数学标记语言 是XML语言的一个子集 用来在web网页 甚至部分软件中显示数学公式 简言之 就是使用特殊的类似HTML的标记在网页中显示数学公式 MathType公式编辑器 MathType是一个强大的数学公式
  • JSP的原理

    Tomcat的lib目录下的jasper jar包 这个包里面有一个HttpJspBase类 这个类我们看一下源码 Source code recreated from a class file by IntelliJ IDEA power
  • CC++ 标头和源文件:它们如何工作?

    本文将向您展示将程序划分为C中的组件部分或正确使用标头和源文件C 诀窍 介绍 我主要是为我的一个朋友写这篇文章的 但是 如果我不与大家分享这一点 我会对社区造成伤害 所以就在这里 我们将探索标头和源文件以及它们的作用 这些代码的大部分在 C
  • SSH框架简介篇

    文章目录 概述 目录结构 struts Spring Hibernate 总结 概述 SSH框架 Struts Spring Hibernate 是一种广泛应用的Java企业级开发框架组合 它将Struts Spring和Hibernate
  • LVM原理及配置

    1 简介 1 1 什么是LVM LVM是 Logical Volume Manager 逻辑卷管理 的简写 它由Heinz Mauelshagen在Linux 2 4内核上实现 目前最新版本为 稳定版1 0 5 开发版 1 1 0 rc2
  • 中国天气网接口

    中国天气weather com http m weather com cn data 101110101 html 六天预报 http www weather com cn data sk 101110101 html 实时天气信息 其中1
  • RSA pkcs1与pkcs8 java获取私钥

    RSA pkcs1与pkcs8 java获取私钥 目录 RSA pkcs1与pkcs8 java获取私钥 获取秘钥 获取pkcs1 格式秘钥 获取pkcs8格式秘钥 读取秘钥信息 解密 获取秘钥 maven依赖