4

こんにちは、RSA 公開鍵で暗号化されたファイルを復号化しようとしています。pubkey に対応する 3072 ビットの RSA 秘密鍵があります。このファイルには、キーの PKCS8 エンコーディングの raw バイトが含まれています。私はバイト配列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;

誰か私を助けてください

4

3 に答える 3

6

内部エンコーディング(によって提供されるものなどRSAPrivateKey.getEncoded())のみがあり、実際のP​​KCS#8暗号化RSA秘密鍵はないと仮定します。

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(rsa_priv);
KeyFactory rsaFact = KeyFactory.getInstance("RSA");
RSAPrivateKey key = (RSAPrivateKey) rsaFact.generatePrivate(spec);
于 2012-09-12T18:11:05.373 に答える
1

いくつかの問題があります。

まず、それはECBモードであり、ではありませんEBC。それはあなたが得ている最初のエラーです。

次に、RSA キーは SecretKeySpec ではありません。

Javaでパスワード暗号化キーを読み取る方法は? は、RSA キーを取得する方法を示しています。取得したら、http://www.flexiprovider.de/examples/ExampleRSA.htmlでその使用方法を示します。

于 2012-09-11T12:08:57.980 に答える
0

ここに投稿する前に、エラーをコピーして Google に貼り付ける必要があります。

これでおそらく問題は解決します。

init()基本的に、リンクで説明されているようにプロバイダーを設定するメソッドが必要です。

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

このためには、 BouncyCastle ライブラリをインポートする必要があります。

于 2012-09-11T08:21:25.487 に答える