您好我正在尝试解密使用RSA公钥加密的文件。我有一个对应于pubkey的3072位RSA私钥。该文件包含密钥的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;
有人请帮帮我
答案 0 :(得分:3)
假设您只有内部编码(例如由RSAPrivateKey.getEncoded()
提供)而不是实际的PKCS#8加密RSA私钥:
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(rsa_priv);
KeyFactory rsaFact = KeyFactory.getInstance("RSA");
RSAPrivateKey key = (RSAPrivateKey) rsaFact.generatePrivate(spec);
答案 1 :(得分:1)
有几个问题。
首先,它是ECB
模式,而不是EBC
;这是你得到的第一个错误。
其次,RSA密钥不是SecretKeySpec。
How to read a password encrypted key with java?显示了检索RSA密钥的方法,一旦有了,http://www.flexiprovider.de/examples/ExampleRSA.html就会显示如何使用它。
答案 2 :(得分:0)
您应该将错误复制并粘贴到Google中,然后再将其发布到此处。
This可能解决了你的问题。
基本上,您需要init()
方法设置提供程序,如链接中所述。
/**
* Init java security to add BouncyCastle as an RSA provider
*/
public static void init() {
Security.addProvider(new BouncyCastleProvider());
}
为此,您需要导入BouncyCastle library。