RSA pkcs1與pkcs8 java獲取私鑰

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

  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章