2011-05-12 18 views
2

BouncyCastleの暗号ライブラリとRSAの暗号ライブラリで簡単なテストを行っています。私はそうBouncyCastleエラー:ECDSAベースの署名者のキータイプを認識できません

Signature sig = Signature.getInstance("SHA384/ECDSA","BC"); 

のような署名を生成し、私は、秘密鍵に署名しようと次に

KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "JsafeJCE"); 
kpg.initialize(new ECGenParameterSpec("secp384r1")); 
KeyPair kp = kpg.genKeyPair(); 
PrivateKey priv = kp.getPrivate(); 
PublicKey pub = kp.getPublic(); 

sig.initSign(priv); 
を私はそうのような公開鍵/秘密鍵のペアを生成してやっています

これは私にエラーが表示されます:

java.security.InvalidKeyException:ECDSAのキータイプを認識できません

私がBCとJsafeJCEのとき、私はエラーを起こさず、すべて正常です。両方のプロバイダがBCの場合にも機能します。だから私はJsafeJCEがBC libで鍵を生成したことに署名できないのはなぜですか?

答えて

2

Bouncycastleでは、署名実装に使用される秘密鍵がそれ自身のものでなければならないことが要求されています。私はどのようなイベントでも様々な作品のために異なるプロバイダを選ぶ理由はわかりません。

+0

相手側のプロバイダが異なるとどうなりますか?そこで私はJsafeJCEプロバイダを使用する既存のアプリケーションを使って作業しています。私は私の最後にBCを使用しています。 BCはすべてを正しく検証できますか? – Otra

+0

はい、データはプロバイダに依存しない標準形式を使用して転送されます。 –

3

私は、以下の手順に従って、同じ問題を解く:静的プロバイダを作成します)

1:

private static BouncyCastleProvider bouncyCastleProvider; 
public static final BouncyCastleProvider BOUNCY_CASTLE_PROVIDER = new BouncyCastleProvider(); 
static { 
    bouncyCastleProvider = BOUNCY_CASTLE_PROVIDER; 
} 

2)鍵ペアの生成:あなたがしたい場合は

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", bouncyCastleProvider); 
g.initialize(ecSpec, random); 
KeyPair keyPair = g.generateKeyPair(); 

3)キーを使用して署名する:

Signature signature = Signature.getInstance("SHA256withECDSA", bouncyCastleProvider); 
signature.initSign(privateKey); 
signature.update(signedData); 
signature.sign(); 

それは私のために働いて、うまくいけばあなたのために働くでしょう。

関連する問題