1

我想生成一个 RSA 密钥对并记录公钥参数(模数和指数,n 和 e),从现有的一组密钥(以 der 格式)中获取参数,或者从我自己的参数生成一个公钥对。

试图用 Crypto++ 做第一个,但它吐出的 ders 被 openssl 报告为无效。今晚没有帮助 Crypto++ wiki 和文档页面也关闭了!

然后,我尝试通过使用 Crypto++ 制作的一些随机密钥参数来研究在 openssl 中生成密钥对的方法,但几个小时后,我仍然无法破解所有命令行参数。

这并不意味着是一个安全的密钥,它只是一个适用于我的项目中的一些单元测试的工作,它从 JWK 获取公钥作为 (n,e) 对,并且需要验证它实际上可以正确验证签名。但要做到这一点,我需要私有 der 和公共(n,e),并且必须有一种比尝试使用其中一个 openssl 包装器库更简单的方法来仅在生成密钥对时记录密钥参数。

4

1 回答 1

1

我试图用 Crypto++ 做第一个,但它吐出的 ders 被 openssl 报告为无效......

(来自链接的 GitHub):

RSA::PublicKey publicKey(params);
FileSink pubsink("pubkey.der");
publicKey.DEREncode(pubsink);

publicKey.Save您想保存subjectPublicKeyInfo. subjectPublicKeyInfo是您正在考虑的 RSA 密钥加上外部 X.509 包装,如 OID 和版本号。


然后,我尝试通过使用 Crypto++ 制作的一些随机密钥参数来研究在 openssl 中生成密钥对的方法,但几个小时后,我仍然无法破解所有命令行参数。

您可能会发现Crypto++ wiki 中的Keys and Formats很有帮助。它还提供 OpenSSL 和 GnuTLS 命令。


我想生成一个 RSA 密钥对并记录公钥参数(模数和指数,n 和 e),从现有的一组密钥(以 der 格式)中获取参数,或者从我自己的参数生成一个公钥对。

回到这个... 维基上有很多例子RSA Cryptography RSA Encryption SchemesRSA Signature Schemes

一般来说,Crypto++ 对 ASN.1/DER 中的所有密钥进行编码。LoadSave提供“主题信息”部分,并DEREncodeBERDecode提供“原始密钥”部分。再次,看看Keys and Formats

如果要处理 PEM 编码的密钥,则需要PEM Pack。它是一个附加组件,您必须下载它,然后使用包含的 PEM 包构建库。

如果您提供具体数据,例如您尝试处理的十六进制编码密钥,那么我们可以更多地说明您应该做什么。

于 2017-08-25T16:29:09.313 回答