Ну, я отвечу на свой вопрос:
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);