相关疑难解决方法(0)

传输RSA公钥,javaME,充气城堡的问题

我正在致力于将实例消息传递应用程序从Java移植到JavaME,它还实现了加密.问题是我想将我的公钥发送到服务器.桌面客户端具有此作业的代码:

byte[] encoded_public_key=publick_key.getEncoded();
Run Code Online (Sandbox Code Playgroud)

并且服务器具有此代码来检索密钥:

EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encoded_public_key);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey puKey = keyFactory.generatePublic(publicKeySpec);
Run Code Online (Sandbox Code Playgroud)

现在我看了getEncoded的API,它说它以字节数组的形式返回密钥的DER编码形式(http://www.docjar.com/docs/api/sun/s...tml #getEncoded)

我在JavaME中的实现是这样的:

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.
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用服务器代码检索JavaME创建的DER编码密钥时,换句话说,当我尝试这样做时:

EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(DER_encoded_public_key_JAVAME);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey puKey = keyFactory.generatePublic(publicKeySpec);
Run Code Online (Sandbox Code Playgroud)

我明白了

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) …
Run Code Online (Sandbox Code Playgroud)

encryption bouncycastle java-me

3
推荐指数
1
解决办法
3846
查看次数

标签 统计

bouncycastle ×1

encryption ×1

java-me ×1