2011-07-18 10 views
0

私はJavaを使い慣れておらず、RSAアルゴリズムを使用して対称キーをラップします。私の場合は、ラッピングのために公開鍵を生成するのではなく、Microsoftキーストアから公開鍵を取得しています。RSAアルゴリズムを使用したラップアンドアンラッピング中のInvalidKeyException

// Encrypt the generated Symmetric AES Key using RSA cipher  
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", 
     ks.getProvider().getName()); rsaCipher.init(Cipher.WRAP_MODE, RSAPubKey); 
byte[] encryptedSymmKey = rsaCipher.wrap(aeskey); 

下図のように、私は例外:InvalidKeyExceptionを取得しています:

Exception in thread "main" java.security.InvalidKeyException: Unsupported key type: Sun RSA public key, 1024 bits 
    modulus: 171871587533146191561538456391418351861663300588728159334223437391061141885590024223283480319626015611710315581642512941578588886825766256507714725820048129123720143461110410353346492039350478625370269565346566901446816729164309038944197418238814947654954590754593726047828813400082450341775203029183105860831 
    public exponent: 65537 
    at sun.security.mscapi.RSACipher.init(RSACipher.java:176) 
    at sun.security.mscapi.RSACipher.engineInit(RSACipher.java:129) 
    at javax.crypto.Cipher.init(DashoA13*..) 
    at javax.crypto.Cipher.init(DashoA13*..) 
    at com.sap.srm.crpto.client.applet.CryptoClass.main(CryptoClass.java:102) 

誰もが適切なSunMSCAPIを使用するには、どのように任意の提案を持っている場合は私に知らせてください!

答えて

2

エラーメッセージには、Sun RSA public keyが使用されていることが示されています。これは、公開鍵をどのように取得するかに関係なく(コードは提供されていないため、わかりません)、MSCAPIキーストアに関連付けられていないことを意味します。私の推測では、あなたは証明書から公開鍵を受け取ります。だからあなたの問題を解決する一つの方法は、AESキーラップのために、あまりにも、日プロバイダCipherクラスを使用することです。この場合はそう

Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
rsaCipher.init(Cipher.WRAP_MODE, RSAPubKey); 
byte[] encryptedSymmKey = rsaCipher.wrap(aeskey); 

、あなたの目標を達成するためのMSCAPIを使用する必要はありません - あなたができます標準のプロバイダを使用します。

関連する問題