Android版X.509认证

时间:2011-12-27 23:00:59

标签: android cryptography bouncycastle x509

关于我的项目的一点背景:

我正在使用ECDH for Android(BouncyCastle)实施短信加密程序,我需要通过短信发送我的公钥。功能明智,一切都在起作用,但我对我实施的X.509代码持怀疑态度。

在发件人方面:

        byte[] pubEnc = aKeyPair.getPublic().getEncoded();
        X509EncodedKeySpec  pubX509 = new X509EncodedKeySpec(pubEnc);

然后将pubX509编码为Base64并通过SMS发送

在接收方:

        KeyFactory          keyFac = KeyFactory.getInstance("ECDH", "SC");
        X509EncodedKeySpec  pubX509 = new X509EncodedKeySpec(SharedS);
        ECPublicKey         pubKey = (ECPublicKey)keyFac.generatePublic(pubX509);

接收到的值是将Base64解码为SharedS,并将其转换为新的pubX509

正如我已经提到的那样,实现明智,这段代码似乎运行正常,但是我想知道我是否正确实现了X509。

任何建议都会非常感激。

1 个答案:

答案 0 :(得分:3)

Sun(现在称为Oracle)称之为X509EncodedKeySpec的事实仅仅是因为公钥是使用在更大的X.509证书标准中指定的格式进行编码的。对于互联网,RFC 5280中指定了X.509证书的正确实现。如您所见,此RFC的长度超过140页。在整个文档中,这3行描述了如何表示公钥:

   SubjectPublicKeyInfo  ::=  SEQUENCE  {
        algorithm            AlgorithmIdentifier,
        subjectPublicKey     BIT STRING  }

这是由Java类X509EncodedKeySpec生成的格式。您可以忽略X509标准的所有其余部分,您不必使用证书。