开发者

How can I produce a valid Private Key (in any format) from the primes?

开发者 https://www.devze.com 2023-04-04 21:03 出处:网络
I have the necessary components to build the private/public RSA key: N, E, D, P, & Q.I can derive the other values for the CRT if needed.How can I use these parameters to produce a valid Private/P

I have the necessary components to build the private/public RSA key: N, E, D, P, & Q. I can derive the other values for the CRT if needed. How can I use these parameters to produce a valid Private/Public key in DER, PEM, or PKCS#7? It doesn't matter which to me as I can convert between them. I'm looking for a tool, library, script, or program that supports assigning these values and writing out a valid file, so I don't have to read hundreds of pages on ASN.1. Every tool I've looked at do开发者_高级运维esn't expose this use case in the API.


If you are using Java, there is the RSAPrivateKeySpec class, which takes BigInteger arguments of modulus and exponent. There are subclasses which take instead of N the P and Q primes (for more efficiency). You can then use a KeyFactory to convert this object to a Key, and then to some EncodedKeySpec class like PKCS8EncodedKeySpec or X509EncodedKeySpec.


You should be able to use OpenSSL (the library).

BIGNUM is described here. There are many functions to create a BIGNUM out of your input (depending on format). BN_bin2bn is probably the simplest, but hexadecimal or decimal input is also supported.

RSA is a structure that contains BIGNUMs. It's described here. You can initialise it yourself (directly).

You can then write the RSA structure using one of the PEM functions (described here). For example, PEM_write_RSAPrivateKey writes a PEM file containing a private key (you can also encrypt it, if you want to).

I'm not aware of any tool that does all of the above. Also, ASN.1 isn't so bad (a public/private key is pretty much a SEQUENCE of INTEGERs).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号