java - 如何在 X509 中编码专有的非对称公钥

标签 java encoding certificate x509 jce

我正在用 Java 开发一个加密库,它创建了自己专有的非对称加密系统(我们这样做有一个正当的理由,但这里解释得太长了)。这个非对称密码系统是 ElGamal 的实现。该库提供了一种生成 key 对以及加密和解密数据的机制。

该密码系统的公钥和私钥当前未实现任何接口(interface)(它们与 java.security 中的 Key 没有任何联系)。

但是,我们现在需要将 ElGamal 公钥存储在 X509 证书中。为此,我们计划在我们的专有公钥中实现 java.security.PublicKey 接口(interface),因为这将允许我们将专有公钥作为 PublicKey 传递(以允许将其存储在证书中)。然而,实现 PublicKey 意味着我们现在必须在 PublicKey 中实现三个新方法,它们是:

  • 公共(public)字符串 getAlgorithm()
  • 公共(public)字符串 getFormat()
  • 公共(public) by​​te[] getEncoded()

getEncoded() 方法应该返回以某种方式编码的公钥。按照惯例,我们希望使用 X509 格式对数据进行编码。

我们的问题是:如何使用这种编码格式对任意对象的内容进行编码?

最佳答案

X.509 指定证书的格式。公钥本身只是其中的一部分。在 X.509 数据结构中,它存储为位字符串(基本上是原始二进制数据)。

getEncoded 方法通常返回SubjectPublicKeyInfo 结构的 DER 编码,其中包含编码为 ASN.1 对象标识符的算法和公钥本身的位。

documentation of Key提供了更多详细信息。

关于java - 如何在 X509 中编码专有的非对称公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25382733/

相关文章:

windows - 在哪里安装我的自签名证书

wcf - 如何保护未托管在 IIS 中的 WCF 服务

TCP 服务器上的 SslStream 无法使用 RemoteCertificateNotAvailable 验证客户端证书

java - 旋转用整数 0-15 初始化的 4x4 数组的指定行的方法?

java - 如何在 Java 桌面应用程序中显示每分钟左右重新加载一次的内容?

html - 在 Emacs/Elisp 中解码 HTML 实体

java - jsp中的表单返回windows-1252中的文本

java - Oracle:在哪里可以查询 java grants?

java - 在 Java 中,使用 "shortcut"变量会影响性能吗?

php - xml php mysql utf-8 : Greek chars dont display correct in xml