Получение открытого ключа от SubjectPublicKeyInfo - PullRequest
0 голосов
/ 28 января 2011

Я пытаюсь получить открытый ключ из 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, но он просто вызывает последнюю строку.

1 Ответ

4 голосов
/ 29 января 2011

Ну, я отвечу на свой вопрос:

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

Это неправильно. PublicKey уже является ASN1typeSubjectpublicKeyInfo. Для того, чтобы создать SubjectPublicKeyInfo с этой функцией

SubjectPublicKeyInfo(AlgorithmIdentifier algId, byte[] publicKey)

вам нужен идентификатор Algortihm и КЛЮЧ СЕБЯ в закодированной форме. publicKey.getEncoded () - это закодированный KEY + ИДЕНТИФИКАТОР АЛГОРИТМА.

Во всяком случае. Если вы хотите преобразовать открытый ключ SATSA в Subject Public Key Info, вы делаете это:

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

И если вы хотите получить свой открытый ключ в виде RSAkeyparameters из SubjectPublicKeyInfo

RSAKeyParameters param=(RSAKeyParameters) PublicKeyFactory.createKey(subPkInfo);
...