日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java pkcs8_java中公钥,私钥,pkcs1格式,pkcs8格式互转

發(fā)布時(shí)間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java pkcs8_java中公钥,私钥,pkcs1格式,pkcs8格式互转 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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編碼的私鑰字符串進(jìn)行解碼

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編碼的私鑰字符串進(jìn)行解碼

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);

}

}

總結(jié)

以上是生活随笔為你收集整理的java pkcs8_java中公钥,私钥,pkcs1格式,pkcs8格式互转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。