我不太明白这个问题:

根据https://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

然后发布公钥:

openssl rsa -in mykey.pem -pubout > mykey.pub

or

openssl rsa -in mykey.pem -pubout -out mykey.pub

DSA和EC加密密钥具有相同的特性: 如。

openssl genpkey -algorithm ed25519 -out pvt.pem

Then

openssl pkey -in pvt.pem -pubout > public.pem

or

openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem

公共组件参与解密,并将其作为私钥的一部分使解密更快;它可以从私钥中删除,并在需要时计算(用于解密),作为使用密码/密钥/短语加密或保护私钥的替代或补充。如。

openssl pkey -in key.pem -des3 -out keyout.pem

or

openssl ec -aes-128-cbc -in pk8file.pem -out tradfile.pem

可以将第一个参数“aes-128-cbc”替换为任何其他有效的openssl密码名

其他回答

在这段代码中,我们首先创建的是RSA密钥,它是私有的,但它也有一对公钥,所以要获得实际的公钥,我们只需这样做

openssl rsa -in mykey.pem -pubout > mykey.pub

希望你得到更多的信息检查这个

公钥并不像某些人认为的那样存储在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可以

被称为“私钥”的文件包含的信息比单独的私钥多得多,它包括生成私钥/公钥对所需的所有数据(质数、模数、指数等)。

很容易看到这些信息:

openssl genrsa -out private.pem 1024   #generate private key file
openssl rsa -in private.pem -text      #view info in the private key file
openssl rsa -in private.pem -pubout -out public.pem  #extract public key to file
openssl rsa -in public.pem -pubin -text  #view info in the public key file

您将看到私钥文件包括质数和所有其他信息,而公共文件只包括模数和公共指数。

在大多数生成RSA私钥的软件中,包括OpenSSL,私钥被表示为PKCS#1 RSAPrivatekey对象或其变体:

A.1.2 RSA private key syntax An RSA private key should be represented with the ASN.1 type 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公钥信息的严格超集。

似乎是流行的非对称密码学的一个共同特征;生成公钥/私钥涉及生成私钥,私钥包含以下密匙对:

openssl genrsa -out mykey.pem 1024

然后发布公钥:

openssl rsa -in mykey.pem -pubout > mykey.pub

or

openssl rsa -in mykey.pem -pubout -out mykey.pub

DSA和EC加密密钥具有相同的特性: 如。

openssl genpkey -algorithm ed25519 -out pvt.pem

Then

openssl pkey -in pvt.pem -pubout > public.pem

or

openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem

公共组件参与解密,并将其作为私钥的一部分使解密更快;它可以从私钥中删除,并在需要时计算(用于解密),作为使用密码/密钥/短语加密或保护私钥的替代或补充。如。

openssl pkey -in key.pem -des3 -out keyout.pem

or

openssl ec -aes-128-cbc -in pk8file.pem -out tradfile.pem

可以将第一个参数“aes-128-cbc”替换为任何其他有效的openssl密码名