RSA怎样设置公钥和私钥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA怎样设置公钥和私钥?相关的知识,希望对你有一定的参考价值。

这两天收集了java RSA加密的一些程序,发现它们的公钥私钥是由程序获取的,不是自己设置的,我觉得它们应该像密码一样应该是由自己设置的,这到底怎么回事呢?如果它们只能获取,那么到底是什么呢?我看了半天,好像它们叫做RSApublicKey和RSAprivateKey的类,不是两个字符串……我实在看不懂,请高手解答!

这个很简单 如果密码手工输入 理论上完全可以 但是密钥有时候二进制有时候会上百位 转化到其他进制要几十位 很容易出错 而且私钥 公钥是从一个推出另一个的 手工输入怎么保证你输入的公钥私钥就可以一定可以配成一对keyPair 而且公钥私钥 必须还要从用p q来算 等等如果手工输入太麻烦了

为何我们不把这些繁琐的 容易出错的东西 封装起来来简化我们的开发呢
所以我们有了各种各样的开发包 各种各样的架构 各种各样的库

java中
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
KeyPair key = keyGen.generateKeyPair();
cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
这是我以前写的代码的片段 不是连续的 大体上就是先得到一个rsa的密钥对 然后调用getpublic()
getprivatekey()获取公私钥就可以了
参考技术A RSA是一种对称加密技术 一对密钥 一个用来加密 一个用来解密 如果自己设置必须要了解rsa算法

openssl生成RSA公钥和私钥

生成公钥与私钥

生成私钥
生成2048长度的私钥,保存在rsa_private_key.pem文件中

# openssl genrsa -out rsa_private_key.pem 2048
Generating RSA private key, 2048 bit long modulus
................................................+++
..............................................................+++
e is 65537 (0x10001)

对私钥进行PKCS#8编码(在密码学中PKCS代表“公钥密码学标准”。这些是RSA Security LLC于1990年代初开始设计和发布的一组公共密钥加密标准。PKCS#8规定了存储私钥信息的标准语法)

# openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt > rsa_private_key_pkcs8.pem

根据私钥生成对应的公钥

# openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key_2048.pub
writing RSA key
# ls -lrth
-rw-r--r-- 1 root root 1.7K 3月  30 17:24 rsa_private_key.pem
-rw-r--r-- 1 root root 1.7K 3月  30 17:30 rsa_private_key_pkcs8.pem
-rw-r--r-- 1 root root  451 3月  30 17:32 rsa_public_key_2048.pub

genrsa命令相关参数

【genrsa】
-out filename:将生成的私钥保存至filename文件,若未指定输出文件,则为标准输出。
numbits:指定要生成的私钥的长度,默认为1024。该项必须为命令行的最后一项参数。
-des:生成的密钥使用des方式进行加密。
-des3:生成的密钥使用des3方式进行加密。
-passout args:加密私钥文件时,传递密码的格式,如果要加密私钥文件时单未指定该项,则提示输入密码。传递密码的args的格式,可从密码、环境变量、文件、终端等输入。
      a.pass:password:password表示传递的明文密码
      b.env:var:从环境变量var获取密码值
      c.file:filename:filename文件中的第一行为要传递的密码。若filename同时传递给"-passin"和"-passout"选项,则filename的第一行为"-passin"的值,第二行为"-passout"的值
      d.stdin:从标准输入中获取要传递的密码

pkcs8相关参数

【pkcs8】
-inform PEM|DER::输入文件格式,DER或者PEM格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
-outform DER|PEM:输出文件格式,DER或者PEM格式。
-in filename:输入的密钥文件,默认为标准输入。如果密钥被加密,会提示输入一个密钥口令。
-passin arg:输入文件口令保护来源。
-out filename:输出文件,默认为标准输出。如果任何加密操作已经执行,会提示输入一个密钥值。输出的文件名字不能和输入的文件名一样。
-passout arg:输出文件口令保护来源。
-topk8:通常的是输入一个pkcs8文件和传统的格式私钥文件将会被写出。设置了此选项后,位置转换过来:输入一个传统格式的私钥文件,输出一个PKCS#8格式的文件。
-noiter:MAC保护计算次数为1。
-nocrypt:PKCS#8密钥产生或输入一般用一个适当地密钥来加密PKCS#8 EncryptedPrivateKeyInfo结构。设置了此选项后,一个不加密的PrivateKeyInfo结构将会被输出。这个选项一直不加密私钥文件,在绝对必要的时候才能够使用。某些软件例如一些JAVA代码签名软件使用不加密的私钥文件。
-nooct:这个选项产生的RSA私钥文件是一个坏的格式,一些软件将会使用。特别的是,私钥文件必须附上一个八位组字符串,但是一些软件仅仅包含本身的结构体没有使八位组字符串所环绕。不采用八位组表示私钥。
-embed:这个选项产生的RSA私钥文件是一个坏的格式。在私钥结构体中采用嵌入式DSA参数格式。在这个表单中,八位组字符串包含了ASN1 SEQUENCE中的两种结构:一个SEQUENCE包含了密钥参数,一个ASN1 INTEGER包含私钥值。
-nsdb:这个选项产生的RSA私钥文件是一个坏的格式并兼容了Netscape私钥文件数据库。采用NetscapeDB的DSA格式。
-v2 alg:采用PKCS#5 v2.0,并指定加密算法,默认的是PKCS#8私钥文件被叫做B<pbeWithMD5AndDES-CBC>(该算法用56字节的DES加密但是在PKCS#5 v1.5中有更加强壮的加密算法)的加密算法用口令进行加密。用B<-v2>选项,PKCS#5 v2.0相关的算法将会被使用,可以是des3(168字节)和rc2(128字节),推荐des3。
-v1 alg:采用PKCS#5 v1.5或pkcs12,并指定加密算法。可采用的算法见下面。

rsa相关参数

【rsa】
-inform PEM|NET|DER:输入文件格式,DER、PEM以及NET格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。NET是为了和老的netscape server以及IIS兼容才弄出来的。他使用没有被salt过的RC4做加密算法,加密强度很底,如果不是一定要用就别用。
-outform PEM|NET|DER:输出文件格式,DER、PEM以及NET格式。同inform。
-in filename:输入的RSA密钥文件,默认为标准输入。
-out filename:RSA密钥输出文件,默认为标准输出。
-passin arg:指定私钥包含口令存放方式。比如用户将私钥的保护口令写入一个文件,采用此选项指定此文件,可以免去用户输入口令的操作。比如用户将口令写入文件“pwd.txt”,输入的参数为:-passin file:pwd.txt。
-passout arg:输出文件口令保护存放方式。
-sgckey:该选项是配合NET格式的私有密钥文件的一个选项。
-text:打印所有信息。
-noout:不打印信息。
-modulus:打印公钥信息。
-check:检查公司约是否匹配。
-pubin:设置此选项后,从输入文件中读取公钥值,默认读取的是私钥值。
-pubout:设置此选项后,保存公钥值到输出文件中,默认的是保存私钥值到输出文件中。
-engine id:指定引擎。
Ø  -des ,-des3, -idea, -aes128, -aes192, -aes256,-camellia128, -camellia192, -camellia256:指定的私钥保护加密算法。

以上是关于RSA怎样设置公钥和私钥?的主要内容,如果未能解决你的问题,请参考以下文章

生成公钥步骤

openssl rsa 可以用私钥加密 公钥解密吗

GIT生成公钥和私钥

关于RSA中公钥和私钥的具体使用情况区分

openssl 怎样生成公钥和密钥 x509格式

RSA公钥和私钥的生成以及PKCS#1与PKCE#8格式的转换