生成公钥和私钥----OpenSSL和keytool

摘要:
使用openssl生成rsa密钥对。密钥长度在512-65536之间(JDK中的默认长度为1024)。私钥以PKCS#8格式编码。RSA使用pkcs协议定义密钥的存储结构。OpenSSL安装位置:

方法一:使用openssl生成rsa密钥对

密钥长度介于 512 - 65536 之间(JDK 中默认长度是1024),且必须是64 的倍数。密钥的常用文件格式有pem(文本存储)或者der(二进制存储)。

当使用Java API生成RSA密钥对时,公钥以X.509格式编码,私钥以PKCS#8格式编码。

RSA使用pkcs协议定义密钥的存储结构等内容

OpenSSL安装位置:F: ensquare_v2OpenSSL-Win64(portable)in

打开cmd,执行以下命令:

第一步:生成私钥,这里我们指定私钥的长度为2048

openssl genrsa -out rsa_private_key.pem 2048

生成公钥和私钥----OpenSSL和keytool第1张

 生成文件,文本存储格式,长度2048:

生成公钥和私钥----OpenSSL和keytool第2张

文件内容如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA7/qffwbF7wd3N6h0KS1nQLkPY0bSZD93/srTLw5sX2eh7suI
Cik9NG8M2Bx01va68MSEgIVhmYVShSuuK9nJMDEygEbTHmnf2iJQJCUUy4ZPBnvi
cUjqpyGsWhVJckTNB41a6oLd1TOTrO07d460fzfEJkRxMx1+qQ5fRiUxVEprxC+5
qT5Z2ILonBh4Zm7dZ6ycIwUs9i9jwQkZCx4j6DYBbJo1HxB5+QLJ5hgleh/MVSSZ
TXIUoUdkXo6VrrxTTSiVcTaqrRAF3PbDJSjF4NZVv1hJWe0REKDIfnQAgFTFLmeE
fM7Av/i2z+xI/OYpsgwkzqY6HtViJmYAq0QnywIDAQABAoIBAGb6mlTtOCThhEQr
EmXVKPi6MSM98ey426pHqSYJP3IVS4TobCFIHw6QFOfsFitkx0WoXt+z3PT/JDEn
VF9W3qHCitRHEDN95WR60v8ftnO718+Fe993FdLQfWBOwCy732u9OeVmcQEbV+Se
DKW6ZDQvXwm41wbDQmYTV8kHDssHK8vle3Q0qzbMI9RS5fq/owH3HWtZKS5HWoWR
utqOIZTcz+ao6upv5qnwv2B5XBcYQ+OdENRQgFZN3hpHLPurwSBrtHblkkys/X2p
N0BDxnmWmIZtkPHmpd2E6RzPgSczQ+qp0N6uxNcYubYyv9+P7jP/np60h11XKXpC
dWoEdpECgYEA+EtrZgV9lIut7wvcOcyVX5VrcBpWh17K5Ic3RwWv6h/SVGpCyrwB
k9fSmSseONUAbuaIO9XapOMLgOy2SgwkFRETsXmP32A9E3gEiZPesrMWbuOX9O4c
P+HoPnN8k1GL/gdNkHJz7ci/qLSXTlQAF3/5s/sYE0DLROIc8vp0c8MCgYEA920j
1wYzDaw8Ywi92TK+r43MxSYpP6Ke4nT6FBr+0tRR08YjAU8t4AXnOAdjXe0T1O+G
qz9qK80R21eB/R/Q8AfE2ZpUHr5s2PkibOTtIL0Z2KFiAvSQDWV+r0tYcfk6ccS6
poZkzh/MXlu9WhwPl2YGEspxI+2laTL0Prk241kCgYEAtm3zgwoVssbODQ0RygXe
2lPWlI9FdEDZof8XRj+PeN3Yk91fJcXtAstYGOHtWqRlpRYMkqoV84A+O4Owi8dP
24qohYVjiCQVu/A6pTrYLUQX/3GJfJRWfTlmgjwoE7Wevg5vluoA83zEFRha81oU
ly+YL/0VO1AoCXx4+K28UjECgYEAnciyv0/LxN9eTwVnFBhhM9CokdzJFzScP+u7
ApFIiaguWm+TKSWWKrN5BOjpPB+Qswzgg1pYWYBX79l5IrNkaX160g2xsT1cam1N
v8WpVmRhFB2uRBYzuudLh3vz9hKqa5y6LrGrnSr4CABW2xzj8Hd2TgtdZT0Ka/C7
gzhXwVkCgYBHEcUgn+4RyEYJZ/NC4dDPw4qsjnM21KR3BGaiOM3Jk2uzO3i/v3HC
vzH1DypaJvaMU1qbpweq64zTYlrYTEPRrFcFwzNlV83SNvKXusxLJZdy8nE3fNMr
t+z532dPSf/ylu9EmBfEx0AdobylV+tLF0sDoIw450Ntfg5lakIhHw==
-----END RSA PRIVATE KEY-----

第二步:根据私钥生成对应的公钥:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key_2048.pub

生成公钥和私钥----OpenSSL和keytool第3张

 生成文件:

生成公钥和私钥----OpenSSL和keytool第4张

文件内容如下:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7/qffwbF7wd3N6h0KS1n
QLkPY0bSZD93/srTLw5sX2eh7suICik9NG8M2Bx01va68MSEgIVhmYVShSuuK9nJ
MDEygEbTHmnf2iJQJCUUy4ZPBnvicUjqpyGsWhVJckTNB41a6oLd1TOTrO07d460
fzfEJkRxMx1+qQ5fRiUxVEprxC+5qT5Z2ILonBh4Zm7dZ6ycIwUs9i9jwQkZCx4j
6DYBbJo1HxB5+QLJ5hgleh/MVSSZTXIUoUdkXo6VrrxTTSiVcTaqrRAF3PbDJSjF
4NZVv1hJWe0REKDIfnQAgFTFLmeEfM7Av/i2z+xI/OYpsgwkzqY6HtViJmYAq0Qn
ywIDAQAB
-----END PUBLIC KEY-----

第三步:私钥转化成pkcs8格式

尖括号的意思是:将转化好的私钥写到rsa_private_key_pkcs8.pem文件里

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

生成公钥和私钥----OpenSSL和keytool第5张

 生成文件:

生成公钥和私钥----OpenSSL和keytool第6张

文件内容如下:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDv+p9/BsXvB3c3
qHQpLWdAuQ9jRtJkP3f+ytMvDmxfZ6Huy4gKKT00bwzYHHTW9rrwxISAhWGZhVKF
K64r2ckwMTKARtMead/aIlAkJRTLhk8Ge+JxSOqnIaxaFUlyRM0HjVrqgt3VM5Os
7Tt3jrR/N8QmRHEzHX6pDl9GJTFUSmvEL7mpPlnYguicGHhmbt1nrJwjBSz2L2PB
CRkLHiPoNgFsmjUfEHn5AsnmGCV6H8xVJJlNchShR2RejpWuvFNNKJVxNqqtEAXc
9sMlKMXg1lW/WElZ7REQoMh+dACAVMUuZ4R8zsC/+LbP7Ej85imyDCTOpjoe1WIm
ZgCrRCfLAgMBAAECggEAZvqaVO04JOGERCsSZdUo+LoxIz3x7LjbqkepJgk/chVL
hOhsIUgfDpAU5+wWK2THRahe37Pc9P8kMSdUX1beocKK1EcQM33lZHrS/x+2c7vX
z4V733cV0tB9YE7ALLvfa7055WZxARtX5J4MpbpkNC9fCbjXBsNCZhNXyQcOywcr
y+V7dDSrNswj1FLl+r+jAfcda1kpLkdahZG62o4hlNzP5qjq6m/mqfC/YHlcFxhD
450Q1FCAVk3eGkcs+6vBIGu0duWSTKz9fak3QEPGeZaYhm2Q8eal3YTpHM+BJzND
6qnQ3q7E1xi5tjK/34/uM/+enrSHXVcpekJ1agR2kQKBgQD4S2tmBX2Ui63vC9w5
zJVflWtwGlaHXsrkhzdHBa/qH9JUakLKvAGT19KZKx441QBu5og71dqk4wuA7LZK
DCQVEROxeY/fYD0TeASJk96ysxZu45f07hw/4eg+c3yTUYv+B02QcnPtyL+otJdO
VAAXf/mz+xgTQMtE4hzy+nRzwwKBgQD3bSPXBjMNrDxjCL3ZMr6vjczFJik/op7i
dPoUGv7S1FHTxiMBTy3gBec4B2Nd7RPU74arP2orzRHbV4H9H9DwB8TZmlQevmzY
+SJs5O0gvRnYoWIC9JANZX6vS1hx+TpxxLqmhmTOH8xeW71aHA+XZgYSynEj7aVp
MvQ+uTbjWQKBgQC2bfODChWyxs4NDRHKBd7aU9aUj0V0QNmh/xdGP4943diT3V8l
xe0Cy1gY4e1apGWlFgySqhXzgD47g7CLx0/biqiFhWOIJBW78DqlOtgtRBf/cYl8
lFZ9OWaCPCgTtZ6+Dm+W6gDzfMQVGFrzWhSXL5gv/RU7UCgJfHj4rbxSMQKBgQCd
yLK/T8vE315PBWcUGGEz0KiR3MkXNJw/67sCkUiJqC5ab5MpJZYqs3kE6Ok8H5Cz
DOCDWlhZgFfv2Xkis2RpfXrSDbGxPVxqbU2/xalWZGEUHa5EFjO650uHe/P2Eqpr
nLousaudKvgIAFbbHOPwd3ZOC11lPQpr8LuDOFfBWQKBgEcRxSCf7hHIRgln80Lh
0M/DiqyOczbUpHcEZqI4zcmTa7M7eL+/ccK/MfUPKlom9oxTWpunB6rrjNNiWthM
Q9GsVwXDM2VXzdI28pe6zEsll3LycTd80yu37PnfZ09J//KW70SYF8THQB2hvKVX
60sXSwOgjDjnQ21+DmVqQiEf
-----END PRIVATE KEY-----

方法二:使用keytool生成密钥证书

注意使用Openssl先生成私钥,再由私钥生成公钥。而使用keytool则是生成密钥证书,每个证书包含公钥和私钥。

一、生成秘钥证书xc.keystore的命令

在一个没有英文的目录中打开cmd,执行以下命令:

keytool -genkeypair -alias xckey -keyalg RSA -keypass xuecheng -keystore xc.keystore -storepass xuechengkeystore

生成公钥和私钥----OpenSSL和keytool第7张

Keytool 是一个java提供的证书管理工具

-alias:密钥(即密钥对,包括公钥和私钥)的别名

-keyalg:使用的hash算法

-keypass:密钥(密钥对)的访问密码

-keystore:密钥库文件名,xc.keystore保存了生成的证书

-storepass:密钥库的访问密码

执行完之后,会多出一个文件

生成公钥和私钥----OpenSSL和keytool第8张

查询证书信息:keytool -list -keystore xc.keystore(需要输入密钥库的密码)

生成公钥和私钥----OpenSSL和keytool第9张

删除别名:keytool -delete -alias xckey -keystore xc.keystore

二、从密钥证书中导出公钥pubkey

openssl是一个加解密工具包,这里使用openssl来导出公钥信息。公钥放在资源服务中

cmd进入xc.keystore文件所在目录执行如下命令:

keytool -list -rfc --keystore xc.keystore | openssl x509 -inform pem -pubkey

生成公钥和私钥----OpenSSL和keytool第10张

下边这一段就是公钥内容:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgDFL6SdYkToAxEbLrzzL
VdXF/p1jSz4Cp/rusQE/VDSXC2PpA17bz2TQq3bhCkTREFZKWM7wRdWFVq9CIBJ1
N5nZ/33Zdt2sVIzBIhZUXiUqpU83PZPzy+46wAqrCZHrNtUETf1V7u3z50mcoDUI
9WpsYYzrWCyaIlZGUZIfgxf7HU5XE1T89Y/BMuFEW7sipchrKudlrxEyYwofr3+1
m48NKuGxmwW7gCchlklyTGY5xA1+CJODIu6IJFRgzyh1Q0skJsKZJ5c0fWfO1tsn
E6abmQcQLANVfQBo7q1WLucxb3JCrJF2ccrpQbhGbytZqrDg6naYm4MtdvE86zNx
sQIDAQAB
-----END PUBLIC KEY-----

将上边的公钥拷贝到文本文件中,合并为一行。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

免责声明:文章转载自《生成公钥和私钥----OpenSSL和keytool》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【题解】小Z的袜子Gin框架安装使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决cocos2dx在VS2012中文版环境下不支持中文的问题

  首先要明确的一点是:cocos2dx是支持中文的。因为其编码格式为UTF-8(无签名)——这只是我在网上找到的结论,并非从官方获取,因此不能十分确定,不过应该无误。   那么,为什么在VS2012环境下,cocos2dx不能正确显示中文呢?   这是因为二者编码格式不一致。VS2012中文版的默认编码格式为GB2312-80(我不确定英文版的格式如何,...

查看和设置Oracle数据库字符集

数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。    客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,    表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表    会话字符集...

PyCharm创建普通项目配置支持jinja2语法

打开项目的根目录的.idea文件夹中项目名.iml文件(隐藏文件) 打开这个iml文件,在component标签的同级,添加如下代码: <component name="TemplatesService"> <option name="TEMPLATE_CONFIGURATION" value="Jinja2" /> <opt...

laravel 踩坑 env,config

正常情况: env 方法 可以获取 .env 文件的值 config 可以获取 config 文件夹下 指定配置的值 非正常情况: 当我们执行了 php artisan config:cache 之后 在bootstrap/cache 文件夹下 会生成一个 config.php 文件 这个文件包含了 config 文件夹下的所有文件内容,并以文件...

android的项目文件介绍

1.res目录存放Android的各种资源文件,比如layout存放布局文件main.xml,values存放各种xml格式的资源文件,字符串资源strings.xml,颜色资源文件:colors.xml;尺寸资源文件:dimens.xml.drawlable-ldpi,drawlable-mdpi,drawlable-hdpi则分别用于存放小、中、大三种...

简单应用复旦FNLP自然语言处理工具(一)

FNLP是一个基于机器学习的中文自然语言文本处理的开发工具包,FNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。                                                      ----------百度百科 信息检索 文本分类 新闻聚类 中文处理: 中文分词 词性标注...