【问题标题】:Obtaining public key from SubjectPublicKeyInfo从 SubjectPublicKeyInfo 获取公钥
【发布时间】:2011-06-17 06:16:20
【问题描述】:

我正在尝试从 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 但它只是调用最后一行。

【问题讨论】:

    标签: java-me bouncycastle public-key


    【解决方案1】:

    好吧,我将回答我自己的问题:

    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);
    

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 2012-12-12
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 2012-12-12
      • 2014-02-16
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多