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)

你需要一个算法标识符和编码形式的密钥本身。publicKey.getEncoded() 是一个编码的 KEY + 算法标识符。

反正。如果要将 SATSA 公钥转换为主题公钥信息,请执行以下操作:

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

如果您想从 SubjectPublicKeyInfo 获取您的公钥作为 RSAkeyparameters

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