RSA pkcs1与pkcs8 java获取私钥

1 篇文章 0 订阅

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

  }

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值