如何从素数中生成有效的私钥(任何格式)?

时间:2011-09-12 17:56:06

标签: cryptography rsa

我有构建私有/公共RSA密钥的必要组件:N,E,D,P和&问:如果需要,我可以为CRT推导出其他值。如何使用这些参数在DER,PEM或PKCS#7中生成有效的私钥/公钥?对我来说无关紧要,因为我可以在它们之间进行转换。我正在寻找支持分配这些值并写出有效文件的工具,库,脚本或程序,因此我不必在ASN.1上阅读数百页。我看过的每个工具都没有在API中公开这个用例。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Java,则会有RSAPrivateKeySpec类,它接受模数和指数的BigInteger个参数。有些子类代替N取P和Q素数(为了提高效率)。然后,您可以使用KeyFactory将此对象转换为Key,然后转换为某些EncodedKeySpec类,如PKCS8EncodedKeySpecX509EncodedKeySpec

答案 1 :(得分:0)

您应该可以使用OpenSSL(库)。

描述了BIGNUM here。有许多功能可以从输入中创建BIGNUM(取决于格式)。 BN_bin2bn可能是最简单的,但也支持十六进制或十进制输入。

RSA是一个包含BIGNUM的结构。它描述了here。您可以自己(直接)初始化它。

然后,您可以使用其中一个PEM函数编写RSA结构(描述为here)。例如,PEM_write_RSAPrivateKey写入包含私钥的PEM文件(如果需要,也可以对其进行加密)。

我不知道有任何工具可以完成上述所有工作。此外,ASN.1并不是那么糟糕(公钥/私钥几乎是INTEGER的SEQUENCE)。