0

通过以下 Openssl 命令生成 PEM 格式的 privateKey 文件以生成.csr.

openssl req -newkey rsa:2048 -nodes -out %~dp0\req.csr -keyout %~dp0\..\private.key -sha256 -config %~dp0\..\cfg.cfg

现在,我想从那个文件中得到一个中国剩余定理 - 关键对象。但我现在不成功。所以也许你可以帮我一把。

4

1 回答 1

1

我不确定您是否想要仅 BC(LWAPI?)解决方案,或者您是否会选择可以使用Sun或 BC 提供程序的 JCE。如果是后者:

由 openssl 生成和编写的 RSA 密钥对始终采用 CRT 形式,除非您努力阻止它,req但事实并非如此。对于 openssl 1.0.0+,来自req -newkey(和大多数其他东西)的私钥文件是包含PKCS#1 CRT 的 PKCS#8;在旧版本中,它是“旧版”PKCS#1 CRT,必须重新格式化为 PKCS#8,最容易通过(编辑) openssl pkcs8 -topk8 -nocrypt -in *file* -out *file* [-outform der](见下文)。PKCS#8 可以并且经常是加密的,但未req -newkey -nodes加密,pkcs8 -nocrypt.

JCE 可以读取(编辑)包含 PKCS#1 CRT(以及其他内容)的未加密 DER PKCS#8。使用 openssl 将 PEM 转换为 DER 更容易,因为它是一个简单的命令行(特别是如果结合 legacy 到 PKCS#8 的转换,请参见上文);然后在Java中:

  • 将(编辑)未加密的 PKCS#8 DER 读入比方byte[]buffer
  • 将其传递给java.security.KeyFactory.getInstance("RSA"[,provider]) .generatePrivate(buffer)(或等效的)。

结果具有依赖于提供程序的类型,但在任​​何一种情况下它都实现了 interface java.security.interfaces.RSAPrivateCrtKey

JCE 本身不做 PEM。如果您有 PEM,请阅读它,剥离 BEGIN/END 行,将剩余的 base64 转换为字节,然后继续使用 JCE。

于 2014-12-15T14:05:25.013 回答