Java 如何从字节数组创建RSAPrivateKey实例?

Java 如何从字节数组创建RSAPrivateKey实例?,java,cryptography,Java,Cryptography,您好,我正在尝试解密一个用RSA公钥加密的文件。我有一个3072位RSA私钥,对应于pubkey。该文件包含密钥的PKCS8编码的原始字节。我把它放在一个字节数组rsa_priv中 public void decrypt() { try { SecretKeySpec sk=new SecretKeySpec(rsa_priv,"RSA/EBC/PKCS8"); Cipher dec = Cipher.getInstance("RSA"); dec.init(Cipher

您好,我正在尝试解密一个用RSA公钥加密的文件。我有一个3072位RSA私钥,对应于pubkey。该文件包含密钥的PKCS8编码的原始字节。我把它放在一个字节数组rsa_priv中

public void decrypt()
{
try
{
    SecretKeySpec sk=new SecretKeySpec(rsa_priv,"RSA/EBC/PKCS8");
    Cipher dec = Cipher.getInstance("RSA");
    dec.init(Cipher.DECRYPT_MODE, sk,new IvParameterSpec(iv));
     //OAEPWithSHA-512AndMGF1Padding        
     byte temp[];
     temp=dec.doFinal(sess);
     String t=temp.toString();
     System.out.println("Session key is:"+ t);
     //session=dec(sess,rsa_priv);OAEPWithSHA-256AndMGF1Padding
}
catch (Exception e)
{
    System.out.println("Exception occured:"+ e);
}
}
当我运行这段代码时,我得到以下信息

Exception occured:java.security.InvalidKeyException: No installed provider 
supports this key: javax.crypto.spec.SecretKeySpec
我进口了这些

import java.io.*;
import javax.crypto.*; 
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.KeyGenerator;
import java.security.*;
import javax.crypto.SecretKey;
import javax.crypto.spec.OAEPParameterSpec;

有人请帮我

你真的应该在这里发布之前将错误复制并粘贴到谷歌上

也许能解决你的问题

基本上,您需要一个
init()
方法来设置提供程序,如链接中所述

/**
 * Init java security to add BouncyCastle as an RSA provider
 */
public static void init() {
   Security.addProvider(new BouncyCastleProvider());
}

为此,您需要导入。有几个问题

首先,它是
ECB
模式,而不是
EBC
;这是你遇到的第一个错误

其次,RSA密钥不是SecretKeySpec


显示了检索RSA密钥的方法,一旦获得该密钥,将显示如何使用该密钥。

假定您只有内部编码(如由
RSAPrivateKey.getEncoded()
提供),而不是实际的PKCS#8加密RSA私钥:

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(rsa_priv);
KeyFactory rsaFact = KeyFactory.getInstance("RSA");
RSAPrivateKey key = (RSAPrivateKey) rsaFact.generatePrivate(spec);

请将链接文章的相关部分添加到您的答案中。不要只是发布链接。您不需要BC来支持RSA。欢迎新用户!不要忘记查看Jeremy D所做的更改。请跟进您的问题,不要忘记接受解决您问题的答案之一。