0

SubjectPublicKeyInfo から公開鍵を取得しようとしていますが、試してみると:

PublicKey publicKey = k.generatePublic(keypsec);

byte[] encoded=publicKey.getEncoded();
SubjectPublicKeyInfo subPkInfo2 = new SubjectPublicKeyInfo(rsaEncryption, encoded);     
RSAPublicKeyStructure  pubKey = new RSAPublicKeyStructure((ASN1Sequence)subPkInfo2.getPublicKey());

これを投げる

java.lang.IllegalArgumentException: illegal object in getInstance: org.bouncycastle.asn1.DERSequence
    at org.bouncycastle.asn1.DERInteger.getInstance(DERInteger.java:37)
    at org.bouncycastle.asn1.x509.RSAPublicKeyStructure.<init>(RSAPublicKeyStructure.java:63)

何か案は?PubliKeyFactory を試しましたが、最後の行を呼び出すだけです。

4

1 に答える 1

4

さて、私は自分の質問に答えます:

byte[] encoded=publicKey.getEncoded();
SubjectPublicKeyInfo subPkInfo2 = new SubjectPublicKeyInfo(rsaEncryption, encoded); 

これは間違っています。PublicKey はすでに ASN1typeSubjectpublicKeyInfo です。この関数で SubjectPublicKeyInfo を作成するには

SubjectPublicKeyInfo(AlgorithmIdentifier algId, byte[] publicKey)

アルゴリズム識別子とエンコードされた形式の THE KEY ITSELF が必要です。publicKey.getEncoded() は、エンコードされた KEY + THE ALGORITHM IDENTIFIER です。

ともかく。SATSA 公開鍵をサブジェクト公開鍵情報に変換したい場合は、次のようにします。

byte[] publickeyb=SATSApublickey.getEncoded();
    SubjectPublicKeyInfo subPkInfo = new SubjectPublicKeyInfo((ASN1Sequence)ASN1Object.fromByteArray(publickeyb));

また、公開鍵を SubjectPublicKeyInfo から RSAkey パラメータとして取得する場合は、

RSAKeyParameters param=(RSAKeyParameters) PublicKeyFactory.createKey(subPkInfo);
于 2011-01-28T22:28:48.497 に答える