我正在用 Java 开发一个加密库,它创建了自己专有的非对称加密系统(我们这样做有一个正当的理由,但这里解释得太长了)。这个非对称密码系统是 ElGamal 的实现。该库提供了一种生成 key 对以及加密和解密数据的机制。
该密码系统的公钥和私钥当前未实现任何接口(interface)(它们与 java.security 中的 Key 没有任何联系)。
但是,我们现在需要将 ElGamal 公钥存储在 X509 证书中。为此,我们计划在我们的专有公钥中实现 java.security.PublicKey 接口(interface),因为这将允许我们将专有公钥作为 PublicKey 传递(以允许将其存储在证书中)。然而,实现 PublicKey 意味着我们现在必须在 PublicKey 中实现三个新方法,它们是:
- 公共(public)字符串 getAlgorithm()
- 公共(public)字符串 getFormat()
- 公共(public) byte[] getEncoded()
getEncoded() 方法应该返回以某种方式编码的公钥。按照惯例,我们希望使用 X509 格式对数据进行编码。
我们的问题是:如何使用这种编码格式对任意对象的内容进行编码?
最佳答案
X.509 指定证书的格式。公钥本身只是其中的一部分。在 X.509 数据结构中,它存储为位字符串(基本上是原始二进制数据)。
getEncoded
方法通常返回SubjectPublicKeyInfo 结构的 DER 编码,其中包含编码为 ASN.1 对象标识符的算法和公钥本身的位。
documentation of Key提供了更多详细信息。
关于java - 如何在 X509 中编码专有的非对称公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25382733/