关于我的项目的一点背景:
我正在使用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。
任何建议都会非常感激。
答案 0 :(得分:3)
Sun(现在称为Oracle)称之为X509EncodedKeySpec的事实仅仅是因为公钥是使用在更大的X.509证书标准中指定的格式进行编码的。对于互联网,RFC 5280中指定了X.509证书的正确实现。如您所见,此RFC的长度超过140页。在整个文档中,这3行描述了如何表示公钥:
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
这是由Java类X509EncodedKeySpec
生成的格式。您可以忽略X509标准的所有其余部分,您不必使用证书。