package com.xx.xxx.Util;//原文链接:https://blog.csdn.net/weixin_43203497/article/details/100903486

//import java.io.IOException;//import java.io.StringReader;

import java.io.StringWriter;//import java.security.KeyFactory;//import java.security.PrivateKey;//import java.security.Security;//import java.security.interfaces.RSAPrivateCrtKey;//import java.security.spec.EncodedKeySpec;//import java.security.spec.InvalidKeySpecException;//import java.security.spec.PKCS8EncodedKeySpec;//import java.security.spec.RSAPrivateKeySpec;//import java.util.List;//import org.bouncycastle.asn1.ASN1Encodable;

import org.bouncycastle.asn1.ASN1Object;

import org.bouncycastle.asn1.ASN1ObjectIdentifier;//import org.bouncycastle.asn1.ASN1Primitive;//import org.bouncycastle.asn1.ASN1Sequence;

import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;

import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;

import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;

import org.bouncycastle.asn1.x509.AlgorithmIdentifier;//import org.bouncycastle.crypto.AsymmetricCipherKeyPair;

import org.bouncycastle.util.io.pem.PemObject;//import org.bouncycastle.util.io.pem.PemReader;

import org.bouncycastle.util.io.pem.PemWriter;//import org.bouncycastle.openssl.MiscPEMGenerator;//import org.bouncycastle.openssl.PKCS8Generator;//import com.ctrip.lzyan.test.cipher.cscm.RsaPemUtil;//import com.google.common.base.Joiner;//import com.google.common.base.Splitter;//import com.google.common.base.Strings;//import com.google.common.collect.Lists;

import org.apache.commons.codec.binary.Base64;/**

* Transform PKCS format

* PKCS#1 -> PKCS#8

* PKCS#8 -> PKCS#1

**/

public classRsaPkcsTransformer {//private static final String COMMENT_BEGIN_FLAG = "-----";//private static final String RETURN_FLAG_R = "\r";//private static final String RETURN_FLAG_N = "\n";//format PKCS#8 to PKCS#1

public staticString formatPkcs8ToPkcs1(String rawKey) throws Exception {

String result= null;//extract valid key content

String validKey = rawKey;//RsaPemUtil.extractFromPem(rawKey); // pem文件多行合并为一行//if(!Strings.isNullOrEmpty(validKey))

if(StrTool.strNotNull(validKey))

{//将BASE64编码的私钥字符串进行解码

byte[] encodeByte =Base64.decodeBase64(validKey);//==========//pkcs8Bytes contains PKCS#8 DER-encoded key as a byte[]

PrivateKeyInfo pki =PrivateKeyInfo.getInstance(encodeByte);

RSAPrivateKeyStructure pkcs1Key=RSAPrivateKeyStructure.getInstance(pki.getPrivateKey());byte[] pkcs1Bytes = pkcs1Key.getEncoded();//etc.//==========

String type= "RSA PRIVATE KEY";

result=format2PemString(type, pkcs1Bytes);

}returnresult;

}//format PKCS#1 to PKCS#8

public staticString formatPkcs1ToPkcs8(String rawKey) throws Exception {

String result= null;//extract valid key content

String validKey = rawKey;//RsaPemUtil.extractFromPem(rawKey);//pem文件多行合并为一行//if(!Strings.isNullOrEmpty(validKey))

if(StrTool.strNotNull(validKey))

{//将BASE64编码的私钥字符串进行解码

byte[] encodeByte =Base64.decodeBase64(validKey);

AlgorithmIdentifier algorithmIdentifier= new AlgorithmIdentifier(PKCSObjectIdentifiers.pkcs8ShroudedKeyBag); //PKCSObjectIdentifiers.pkcs8ShroudedKeyBag//ASN1Object asn1Object = ASN1Object.fromByteArray(encodeByte);

ASN1Object asn1Object =ASN1ObjectIdentifier.fromByteArray(encodeByte);

PrivateKeyInfo privKeyInfo= newPrivateKeyInfo(algorithmIdentifier, asn1Object);byte[] pkcs8Bytes =privKeyInfo.getEncoded();

String type= "PRIVATE KEY";//result = format2PemString(type, pkcs8Bytes);//格式化为pem多行格式输出

return Base64.encodeBase64String(pkcs8Bytes); //直接一行字符串输出

}returnresult;

}//Write to pem file//字符串换行显示

private static String format2PemString(String type, byte[] privateKeyPKCS1) throws Exception {

PemObject pemObject= newPemObject(type, privateKeyPKCS1);

StringWriter stringWriter= newStringWriter();

PemWriter pemWriter= newPemWriter(stringWriter);

pemWriter.writeObject(pemObject);

pemWriter.close();

String pemString=stringWriter.toString();returnpemString;

}//=== Testing ===

public static voidmain(String[] args) throws Exception {

String rawKey_pkcs1= "";

String rawKey_pkcs8= "";rawKey_pkcs1= "MIICXQIBAAKBgQDgDxka1U8SWI1vBY7pA1UiCVnrdtSgE+PpyTqe2YSEWCgkYQ2YsohZwsaUao7nya7QnBgRiPKEHgS/Eey+L9iwo32Sn5fUwb0nJ1+JeXRA6JsDEKpONJojIbF2nfgHLWsNn4bzn5Webc6WZLx0GyLTQuZGadFVuVq2dQqEsrq7HwIDAQABAoGAYtaGLo4WWXNywJzlE+kCbwdNAU/kL9FWYtT/5P7zNCZnXtTpWIi5GU+QpfvzmlAfq6qP+3w77wgG8/qGQsd8gGu3mydi0ImmD9sJdhhsJuWZhCMM+qmvSmvG/gvIr+bdEmPhpCQpa3BLveUkFDA/OnwfTVL6ruwZayMzuToB6WECQQD63Gx9DZVhYoSxR7qSmiGf/TjfOJusTcrmc27Z5X5MS36a3Ux9Z+c9EaYFldZ3cPzP521ugNVvZdovKqFKIcQ5AkEA5KYeKBVlkrLaamSEu5WAX3DqJ6iDRqEjzMoVad5B1I7kJHO+NijUxNHaWaSqLOHuk37X+EAjSTozzwOkKwbqFwJBAM1NhhAWBNHtcdEwddWzBJ/N+jRdPLIX/Fz7zZXQRruj8VpGkGn1lf6ZqfjaNuoLcyunKB0OnR6NCbIePl/QIKkCQGgEQjfN9BVWlBJOhCuqCWphvcQo3v+kktq5HCC7YYtHLfZ/SQrubEzVgtXBGUGtzpD+5VUkKGlJtwP4Dhkc3iUCQQCwiFKuQe/OdlkYk1L4mb0H0fzy+/6mYxyUqpTXUw/6BVDOyowvzieh9oh2ZhnQS7YPBWz5ZXzwUH4YVwGqxiwA";

rawKey_pkcs8= "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOAPGRrVTxJYjW8FjukDVSIJWet21KAT4+nJOp7ZhIRYKCRhDZiyiFnCxpRqjufJrtCcGBGI8oQeBL8R7L4v2LCjfZKfl9TBvScnX4l5dEDomwMQqk40miMhsXad+Actaw2fhvOflZ5tzpZkvHQbItNC5kZp0VW5WrZ1CoSyursfAgMBAAECgYBi1oYujhZZc3LAnOUT6QJvB00BT+Qv0VZi1P/k/vM0Jmde1OlYiLkZT5Cl+/OaUB+rqo/7fDvvCAbz+oZCx3yAa7ebJ2LQiaYP2wl2GGwm5ZmEIwz6qa9Ka8b+C8iv5t0SY+GkJClrcEu95SQUMD86fB9NUvqu7BlrIzO5OgHpYQJBAPrcbH0NlWFihLFHupKaIZ/9ON84m6xNyuZzbtnlfkxLfprdTH1n5z0RpgWV1ndw/M/nbW6A1W9l2i8qoUohxDkCQQDkph4oFWWSstpqZIS7lYBfcOonqINGoSPMyhVp3kHUjuQkc742KNTE0dpZpKos4e6Tftf4QCNJOjPPA6QrBuoXAkEAzU2GEBYE0e1x0TB11bMEn836NF08shf8XPvNldBGu6PxWkaQafWV/pmp+No26gtzK6coHQ6dHo0Jsh4+X9AgqQJAaARCN830FVaUEk6EK6oJamG9xCje/6SS2rkcILthi0ct9n9JCu5sTNWC1cEZQa3OkP7lVSQoaUm3A/gOGRzeJQJBALCIUq5B7852WRiTUviZvQfR/PL7/qZjHJSqlNdTD/oFUM7KjC/OJ6H2iHZmGdBLtg8FbPllfPBQfhhXAarGLAA=";String formatKey1=formatPkcs1ToPkcs8(rawKey_pkcs1);String formatKey2 = formatPkcs8ToPkcs1(rawKey_pkcs8);

System.out.println(formatKey1);System.out.println(formatKey2);

}

}

java pkcs8_java中公钥,私钥,pkcs1格式,pkcs8格式互转相关推荐

  1. java读取pem格式私钥_openssl生成RSA格式及pkcs1与pkcs8格式互相转换

    openssl简介 OpenSSL 是一个开源项目,其组成主要包括以下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls ...

  2. openssl生成RSA格式及pkcs1与pkcs8格式互相转换

    openssl简介 OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls ...

  3. java rsa 生成公钥私钥_[Java教程]java RSA 生成公钥私钥

    [Java教程]java RSA 生成公钥私钥 0 2016-10-14 17:00:15 /** * 引进的包都是Java自带的jar包 * 秘钥相关包 * base64 编解码 * 这里只用到了编 ...

  4. java判断是否安装了pdf_java判断上传文件是否为pdf java图像上传中如何判断是否是jpg格式...

    java怎么判断有没有上传文件 Java平台如何判断用户上传的文件是否是图片不要辜负了自己受过的苦难,这样善良又努力的一个你,一定会得到曾梦寐以分享的所有美好. if(typeof FileReade ...

  5. java pkcs8格式的私钥_RSA加密解密中pkcs1与pkcs8格式私钥互相转换

    net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...

  6. java pkcs1转pkcs8_.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接...

    众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...

  7. .NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接

    众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...

  8. pkcs1转pkcs8 php,pkcs1与pkcs8格式RSA私钥互相转换

    注:亲验可用 转载自:https://www.jianshu.com/p/08e41304edab 1.PKCS1私钥生成 openssl genrsa -out private.pem 1024 p ...

  9. java 证书公钥 私钥_ssl - 在Java Key中导入私钥/公钥证书对

    这个问题在这里已有答案: 如何在Java密钥库中导入现有的x509证书和私钥以在SSL中使用?                                     10个答案 我使用以下步骤创建一 ...

  10. php java 私钥 转换格式,php公钥私钥 3 ---非标准格式转换为标准格式

    PHP RSA 报错 openssl_sign(): supplied key param cannot be coerced into a private key 私钥 private functi ...

最新文章

  1. CSS3 box-flex 属性
  2. Redhat 释放cached 内存
  3. 腾讯高性能分布式路由技术,亮相亚太网络研讨会APNet
  4. JDK11的新特性:HTTP API和reactive streams
  5. Flume 1.6 遇Emoji表情发生截断丢失数据问题分析
  6. 如何在客户端调用服务端代码
  7. JQuery data API实现代码分析
  8. MySQL Enterprise Monitor架构图
  9. robot光线机器人安卓版_灯光机器人中文版下载-灯光机器人游戏下载v1.6.5 安卓版-2265游戏网...
  10. ZedGraph类库之基本教程篇
  11. 使用Bandicam录屏
  12. springboot启动类
  13. 看小姐姐用动图展示 10 大 Git 命令
  14. (个人学习笔记)利用ensight进行EDEM耦合FLUENT后处理
  15. win10开机未能正确启动_设置华硕电脑定时开机只需两步!
  16. UNIX操作系统学习(一)
  17. Chrome DevTools 使用详解
  18. Soul 源码分析07 SOUL Admin 网关 Http长轮询 数据同步
  19. 解读ORACLE数据库的统一命名与编码规范
  20. 机械革命无法使用U盘启动linux,机械革命如何用u盘装系统

热门文章

  1. 多电平双向DC/DC直流变换器的工作原理(以三电平为例子)
  2. 制作lfw格式的数据集
  3. 爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能对话机器人
  4. Studio 3T for MongoDB 激活破解脚本
  5. idea报错快捷键_idea快捷键总结
  6. 方舟生存进化刷精英恐龙代码
  7. CATIA2018客户端安装错误之提示Runtime VC14 x86失败,返回代码3
  8. 浏览器网页操作 EXCEL 示例
  9. 在哪里可以找水系图_请问在哪可以找到广西的水系图
  10. Unity WebGL Input输入中文