如何在openssl中使用特定的输入数字生成rsa密钥? [英] How to Generate rsa keys using specific input numbers in openssl?

查看:212
本文介绍了如何在openssl中使用特定的输入数字生成rsa密钥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我选择了2个质数p和q.计算出的公共对:(n,e)和私钥:d.
例如.
p =17, q = 11
n = 187,
e= 7 & d = 23

在互联网上浏览后,我发现此命令生成了公钥,私钥对:
openssl genrsa -out mykey.pem 1024

I selected 2 prime numbers p and q. Calculated public pair: (n,e) and private key: d.
For ex.
p =17, q = 11
n = 187,
e= 7 & d = 23

After sufring on internet i found this command to generate the public,private key pair :
openssl genrsa -out mykey.pem 1024

但是我想生成对应于d = 23的私钥和对应于e = 7的公钥.我该如何给出这些数字作为输入.

But I want to generate private key corresponding to d = 23 and public key corresponding to e = 7. How can i give these numbers as input.

推荐答案

一种方法是使用OpenSSL的asn1parse命令的-genconf选项生成DER编码的密钥.

One way to do this is to generate a DER encoded key using OpenSSL's asn1parse command's -genconf option.

您需要为asn1parse -genconf构造一个输入文件,以生成标准格式的RSA密钥(按照 http://www.openssl.org/docs /crypto/ASN1_generate_nconf.html ,实际上,它已经具有构造RSA密钥的示例.

You'll need to construct an input file for asn1parse -genconf to produce an RSA key in the standard format (per RFC 3447). The syntax for asn1parse -genconf is given here: http://www.openssl.org/docs/crypto/ASN1_generate_nconf.html and indeed, it already has an example for constructing an RSA key.

您需要计算更多的值(特别是d mod (p-1)d mod (q-1)q^-1 mod p.对于您提供的pqd值,这些是:

You need to calculate a few more values (specifically, d mod (p-1), d mod (q-1) and q^-1 mod p. For the values of p, q, d you gave, these are:

d mod(p-1) = 23 mod 16 = 7

d mod(q-1) = 23 mod 10 = 3

q^-1 mod p = 14

将所有内容一起以适当的格式放入文本文件中:

Put this all together into a text file in the appropriate format:

asn1=SEQUENCE:rsa_key

[rsa_key]
version=INTEGER:0
modulus=INTEGER:187
pubExp=INTEGER:7
privExp=INTEGER:23
p=INTEGER:17
q=INTEGER:11
e1=INTEGER:7
e2=INTEGER:3
coeff=INTEGER:14

要构建二进制DER文件:

To construct the binary DER file:

openssl asn1parse -genconf <path to above file> -out newkey.der

然后您可以通过OpenSSL的rsa命令运行此命令以确认:

You can then run this through OpenSSL's rsa command to confirm:

openssl rsa -in newkey.der -inform der -text -check

哪个应该输出:

Private-Key: (8 bit)
modulus: 187 (0xbb)
publicExponent: 7 (0x7)
privateExponent: 23 (0x17)
prime1: 17 (0x11)
prime2: 11 (0xb)
exponent1: 7 (0x7)
exponent2: 3 (0x3)
coefficient: 14 (0xe)
RSA key ok
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MBwCAQACAgC7AgEHAgEXAgERAgELAgEHAgEDAgEO
-----END RSA PRIVATE KEY-----

您可以使用它通过OpenSSL的rsautl命令加密数据(尽管使用此密钥,您只能加密单个字节的数据,前提是该字节也小于187).

You can use this to encrypt data with OpenSSL's rsautl command (though with this key you're limited to encrypting just a single byte of data providing that byte is also less than 187).

这篇关于如何在openssl中使用特定的输入数字生成rsa密钥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆