Problema ao transmitir uma chave pública RSA, javaME, castelo insuflável

Estou trabalhando na portabilidade de um aplicativo de mensagens de instância do Java para o JavaME, que também implementa criptografia. O problema é que eu quero enviar minha chave pública para o servidor. O cliente da área de trabalho possui este código para este trabalho:

byte[] encoded_public_key=publick_key.getEncoded();

E o servidor possui este código para recuperar a chave:

EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encoded_public_key);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey puKey = keyFactory.generatePublic(publicKeySpec);

Agora procurei na API o getEncoded e ele diz que retorna a forma codificada em DER da chave como uma matriz de bytes (http://www.docjar.com/docs/api/sun/s...tml #getEncoded)

Minha implementação para isso no JavaME foi esta:

RSAPublicKeyStructure public_key_JAVAME=new RSAPublicKeyStructure(modulus,exponent);
byte[] DER_encoded_public_key_JAVAME=public_key_JAVAME.getDEREncoded();

//the getEncoded functions returns exact the same byte array.

No entanto, quando tento recuperar a chave codificada DER criada pelo JavaME com o código do servidor, em outras palavras, quando tento isso:

EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(DER_encoded_public_key_JAVAME);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey puKey = keyFactory.generatePublic(publicKeySpec);

eu recebo

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:188)
at java.security.KeyFactory.generatePublic(KeyFactory.java:304)

Caused by: java.security.InvalidKeyException: IOException: algid parse error, not a sequence
at sun.security.x509.X509Key.decode(X509Key.java:380)
at sun.security.x509.X509Key.decode(X509Key.java:386)
at sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:66)
at sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:281)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:184)

Ponto interessante: A chave codificada por DER do Java normal (usando a função getencoded ()) é uma matriz de bytes com 162 bytes de comprimento, enquanto a mesma chave DER codificada em JavaME usando castelo insuflável tem 140 bytes. Essas chaves codificadas em 2 DER não deveriam ter o mesmo comprimento? Quero dizer, é a mesma chave no formato codificado em DER, portanto elas devem ser as mesmas.

O que estou fazendo errado?

É verdade que eu não percebi isso. O problema é que você sabe como criar um objeto subjectPublickeyInfo a partir de uma PublicKey em bouncyCastle? Eu tentei:

ByteArrayInputStream bIn = new ByteArrayInputStream(RSApublickey.toString().getbytes()); SubjectPublicKeyInfo info = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(bIn).readObject());

Mas não deu certo. Eu também tentei:

ByteArrayInputStream(RSApublicKeyStructure.getEncoded()); SubjectPublicKeyInfo info = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(bIn).readObject());

Na verdade, eu esperava que isso não funcionasse, mas eu tive que tentar. Então, como posso criar uma Subjectpublickeyinfo a partir dos parâmetros RSAkey? (Este é um dos pontos em que a obscuridade da API do castelo de bouncy realmente brilha, eu acho)

Mais uma vez obrigado por sua resposta, você tem sido de grande ajuda. Você me colocou no caminho certo.