使用RSA私钥生成公钥?
我不太明白这个:
根据: http : //www.madboa.com/geek/openssl/#key-rsa ,您可以从私钥生成公钥。
openssl genrsa -out mykey.pem 1024 openssl rsa -in mykey.pem -pubout > mykey.pub
我最初的想法是,他们一起生成一对。 RSA私钥是否包含和? 或公钥?
openssl genrsa -out mykey.pem 1024
实际上会产生一个公私钥对。 该对存储在生成的mykey.pem
文件中。
openssl rsa -in mykey.pem -pubout > mykey.pub
将提取公钥并打印出来。 这是一个更好地描述这个网页的链接。
编辑:检查这里的例子部分。 只输出私钥的公共部分:
openssl rsa -in key.pem -pubout -out pubkey.pem
正在寻找SSH公钥的用户
如果你正在寻找提取OpenSSH使用的公共密钥,你将需要有点不同的公钥
$ ssh-keygen -y -f mykey.pem > mykey.pub
这个公钥格式与OpenSSH兼容。 附加公共密钥到remote:~/.ssh/authorized_keys
,你会很好去
来自SSH-KEYGEN(1)
文档SSH-KEYGEN(1)
ssh-keygen -y [-f input_keyfile]
-y这个选项将读取一个私有的OpenSSH格式文件,并将一个OpenSSH公钥输出到标准输出。
RSA私钥包含生成公钥所需的所有信息。 在大多数格式,包括openssl的私钥被表示为一个PKCS#1 RSAPrivatekey对象或其一些变种:
A.1.2 RSA私钥语法
一个RSA私钥应该用ASN.1types表示
RSAPrivateKey:RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }
正如你所看到的,这种格式有许多字段,包括模数和公开指数,因此是RSA公钥中信息的严格超集。
公钥并不像有些人想象的那样存储在PEM文件中。 以下DER结构存在于私钥文件中:
openssl rsa -text -in mykey.pem
RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }
所以有足够的数据来计算公钥(模数和公开指数),这就是openssl rsa -in mykey.pem -pubout
所做的
在这个代码中,首先我们创buildRSA密钥,它是私有的,但它也有一对公钥,所以为了得到你的实际公钥,我们只需要这样做
openssl rsa -in mykey.pem -pubout > mykey.pub
希望你得到更多的信息检查这一点
我在下面的答案有点冗长,但希望它提供了一些以前的答案中缺less的细节。 我将从一些相关的陈述开始,最后回答最初的问题。
要使用RSAalgorithmencryption某些东西,您需要模数和encryption(公共)指数对(n,e)。 那是你的公钥。 要使用RSAalgorithm解密某些东西,您需要模数和解密(私有)指数对(n,d)。 那是你的私钥
要使用RSA公开密钥encryption某些东西,可以将明文作为一个数字并将其提升到e模数n的幂:
ciphertext = ( plaintext^e ) mod n
要使用RSA私钥解密某个东西,您将您的密文视为一个数字,并将其提升到d模数n的幂:
plaintext = ( ciphertext^d ) mod n
要使用openssl生成私有(d,n)密钥,可以使用以下命令:
openssl genrsa -out private.pem 1024
要使用openssl从私钥生成公钥(e,n),可以使用以下命令:
openssl rsa -in private.pem -out public.pem -pubout
要剖析由上面的openssl命令生成的private.pem私有RSA密钥的内容,请运行以下命令(输出在此处被截断为标签):
openssl rsa -in private.pem -text -noout | less modulus - n privateExponent - d publicExponent - e prime1 - p prime2 - q exponent1 - d mod (p-1) exponent2 - d mod (q-1) coefficient - (q^-1) mod p
私钥是不是应该只包含(n,d)对? 为什么有6个额外的组件? 它包含e(公开指数),以便可以从private.pem专用RSA密钥生成/提取/派生公共RSA密钥。 其余5个组件在那里加速解密过程。 事实certificate,通过预先计算并存储这5个值,可以将RSA解密速度提高到4倍。解密将在没有这5个组件的情况下工作,但如果您拥有这些组件,可以更快地完成解密。 加速algorithm基于中国剩余定理 。
是的,private.pem RSA私钥实际上包含所有这8个值; 运行前一个命令时,它们都不会在运行中生成。 尝试运行以下命令并比较输出:
# Convert the key from PEM to DER (binary) format openssl rsa -in private.pem -outform der -out private.der # Print private.der private key contents as binary stream xxd -p private.der # Now compare the output of the above command with output # of the earlier openssl command that outputs private key # components. If you stare at both outputs long enough # you should be able to confirm that all components are # indeed lurking somewhere in the binary stream openssl rsa -in private.pem -text -noout | less
RSA私钥的这种结构由PKCS#1 v1.5推荐作为替代( 第二 )表示。 PKCS#1 v2.0标准完全从替代表示中排除了e和d指数。 PKCS#1 v2.1和v2.2提出了对备选表示的进一步更改,可选地包括更多与CRT相关的组件。
要查看public.pem public RSA密钥的内容,请运行以下命令(输出在此处被截断为标签):
openssl rsa -in public.pem -text -pubin -noout Modulus - n Exponent (public) - e
这里没有什么惊喜。 它只是(n,e)对,如承诺。
现在最后回答最初的问题:如上所示,使用openssl生成的私有RSA密钥包含公钥和私钥等组件。 当您从私钥生成/提取/派生公钥时,openssl将其中两个组件(e,n)复制到一个单独的文件中,成为您的公钥。
Use the following commands: 1. openssl req -x509 -nodes -days 365 -sha256 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem Loading 'screen' into random state - done Generating a 2048 bit RSA private key .............+++ ..................................................................................................................................................................+++ writing new private key to 'mycert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. 2. If you check there will be a file created by the name : mycert.pem 3. openssl rsa -in mycert.pem -pubout > mykey.txt writing RSA key 4. If you check the same file location a new public key : mykey.txt will be created.
- 如何使用OpenSSL来encryption/解密文件?
- Chrome:无效的自签名SSL证书 – “主题备用名称缺失”
- 用OpenSSLreplaceMcrypt
- 为域和子域创build自签名证书 – NET :: ERR_CERT_COMMON_NAME_INVALID
- 如何使用openssl创build自签名证书?
- 受Heartbleed漏洞影响的Windows Server 2012 R2和IIS?
- 将我的encryption库从Mcrypt升级到OpenSSL
- 为localhost创build受信任的自签名SSL证书(用于Express / Node)
- 无法find包装“https” – 你忘记configurationPHP时启用它?