本文章课要结合上一节一起看。
青峰喜欢共享-RSA-Springboot Python集成
专注于青峰,更多青峰可以分享技术知识,下载开源代码。
搜索代码云:青峰会大吃一惊的。
3、RSA使用说明
python生成的公钥私钥格式PKCS1。
生成的PEM格式如下:
私钥标头(- begin RSA private key -)
私钥尾部(- end RSA private key -)
必须将此私钥转换为DER编码的PKCS8非加密格式,以便与Java服务器代码(特别是PKCS8 encodedkeyspec)一起使用。我们使用过使用Rsa和pkcs8命令的OpenSSL,如果有更简单的方法,就不需要特别使用OpenSSL。
OpenSSL RSA-in iserver _ key . orig。-out iserver _ key。
OpenSSL RSA-in iserver _ key . orig。-out iserver _ key。-pub in OpenSSL pkcs 1-in iserver _ key . orig
RSA私钥格式PKCS1和PKCS8相互转换
RSA公钥格式PKCS1和PKCS8相互转换
以下转换基于OpenSSL命令操作。
1.OpenSSL生成PKCS1格式的私钥。密钥长度为1024位,(pkcs1)
运行:OpenSSL genrsa -out 1024
- begin RSA private key -
micxqibaakbgqdlm 5 kosybacfp 8 hzj n1 fl2 wt7a U2 lm 5se tz6r/wws FQ 5k fy
h 8 q 1 ao/c 92 iwepplnbrqymoxqu 6 p 07mg 0 lqocve 5 SDT mavd 2 ex 3 w ce f 8 lwmgdh 5 q
uo 4 OMC mosz 3 IAP/7/fn mag 1 ielsfdronpbdxazp 6 numqzitsyk 6 csel/ewidaqab
aogbajkmdvf i9 kzc 6 yqmc 0 rfqj 3zs vfotsbmqvamnq 8j WBC J1 o 8d/C60 wrqgyb
LFC yo 7 vxomoijqx/jr2a er8 bftg yxy 6 jsmu 3 ynwmwbhcvmcwcmzowue 5 pzdejk 6
lodo ay 7 tke 45 x/WC 7k 9 iz s 2 ub 7 syli vk/hvx xit 6 fg EP a 4 rakea 9 e voabxbv 78
hyxrcstw kc3 lm E4 zybg a B2 iyx 48 uen 34 np5 ri 8 tusq sy7 cz3 RV SMI 1 CPV LJ 2e qk
fu8 fzvfyjwjbao 6 pu 9 q 7 il 8 ntecdvybkderlcawsecdk 9s 79 helt 0 mrg 9 cwavwfo
n 0 uxgt 55 mpxwgdmrxuocnmilaw/p 7 dklucqdpjgeu 3g IVM b 2 DDN 0 a d 2 nuibftu
s 3s ewo b 5 rdl 6t 6 Li iyi 5d FJ 4 uv 9 kvke 7 e py 9 jiabfjj 5 swpmadps 21 zgvgmcqcb
HV k0i w3 zpo gf/j H5 ucbjyhnlemgwm 7x 11 rvqh 1 zw05 vx9/w565 ROI/fjkr 1 qcd
rzjehgqmwdliur 9 BDB akai 8 jwgwldwcexx 9 puu 4 knmgukx 4 gzw 2n 53 vmkp 0fu
puqxmonrwtn ka76 cq8 qij 8 xuebkdxy 1 nfrmekgu 675m
- end RSA private key -
2.将PKCS1私钥转换为PKCS8
运行:OpenSSL pkcs 8-to pk8-inform PEM-in-outform PEM-nocrypt-out
- begin private key -
micdwibadanbgkqhkig 9 w 0 baqefaascamewgjdageaogbaoubn 4 qizjtpxn
yhoo Fv XB bpsc 7 awb lis 3 pq v 7/dbj rkp 9 gfy rua 78 l 3 yjas MMU 1 up iy 5d c 7 o/t
u adsv a 4k 8t MX 22y c 8 pz 7 hfaj 5/y vaa b 2 hmpsjg 4 xyahlpcgcn/v 8 wcxqduh 6 vj92
ui c8 epf ro no1 szbkhoxgrokwsx 97 agmbaaecgyeamqx 28x6l 0 rnzpiowlst 9 andm
z 68 u 62 xuzbuaydwlyeinu 7 x 39 zrtbfcdjuuli 7t VC 6 agg mpf 8 mvzorhxsw 0 b 5j
HL qowy 7 fkfazbufxwyjykzmha 4t MLL 0 qmt qu 505 rltoqtjlf
9Zzsr2Jmza64HuzKUi8r8dXHGK3oUZ49rhECQQD175WgBvEG/vwfLFFxK1b4pzeWYTjNgEYBvYhjHjxQ
Q3fic/msjxO6yqzLsJneu9IyLUKlWWPZ5AoVTwXNUXKPAkEA7o9T2ruKXw215x29
gGQMSuUJrBJ4J2T2zv2F6VPQyuD1xZpVYU6fRTGBPnkw9dYZ0xFdRQ4I2cyKVrD+
nt0qVQJAOmMZ67caK+YHZ0M3Rp3adQgF+26zdJ5agHlF0vpPqWKLKLkN8ni5X2RU
p7sSnL2MhpsWMnlJamZoOmzbXMZUYwJBAIEe8rQhbfOk6B//6OHlRQIElgect4wb
CbtfXWu9AfXNbTlXH39bnrlE4j9+ORHWoIOtkl4eCoxYOUhS5H34F0ECQAjz4laB
Yt1Zx5df0+67go2Ya6THgZnDafne8wqnQW6m5DEyidFZM36QDvpyrxAiPzG4QGR3
HLU0VEwSQa7rvmY=
-----END PRIVATE KEY-----
3. PKCS8格式私钥再转换为PKCS1格式
执行:openssl rsa -in -out
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlLm5+Kosybacfp8hzjn1fl2wT7Au2lm5SEtz6r+/wwSfq5KfY
H8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5sdtmAvD2ex3wCef8lWmgdh5q
Uo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6NUmQZITsYK6CsEl/ewIDAQAB
AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb
lFCyO7VXOmoIJqX/Jr2aER8bFtG+Yxy6jsMu3ynwMwbhcVmCWCmZoWuE5pZdEJk6
lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78
HyxRcStW+Kc3lmE4zYBGAb2IYx48UEN34nP5rI8Tusqsy7CZ3rvSMi1CpVlj2eQK
FU8FzVFyjwJBAO6PU9q7il8NtecdvYBkDErlCawSeCdk9s79helT0Mrg9cWaVWFO
n0UxgT55MPXWGdMRXUUOCNnMilaw/p7dKlUCQDpjGeu3GivmB2dDN0ad2nUIBftu
s3SeWoB5RdL6T6liiyi5DfJ4uV9kVKe7Epy9jIabFjJ5SWpmaDps21zGVGMCQQCB
HvK0IW3zpOgf/+jh5UUCBJYHnLeMGwm7X11rvQH1zW05Vx9/W565ROI/fjkR1qCD
rZJeHgqMWDlIUuR9+BdBAkAI8+JWgWLdWceXX9Puu4KNmGukx4GZw2n53vMKp0Fu
puQxMonRWTN+kA76cq8QIj8xuEBkdxy1NFRMEkGu675m
-----END RSA PRIVATE KEY-----
可以看出结果和1是一致的;
4. 从pkcs1私钥中生成pkcs8公钥
执行:openssl rsa -in -pubout -out
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlLm5+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5
sdtmAvD2ex3wCef8lWmgdh5qUo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
5. 从pkcs8私钥中生成pkcs8公钥
执行:openssl rsa -in -pubout -out public_
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlLm5+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5
sdtmAvD2ex3wCef8lWmgdh5qUo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
可以看出结果和4是一样的;
6. pkcs8公钥转pkcs1公钥
执行:openssl rsa -pubin -in -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA
78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x
yahLPcgCn/v8WcxqDUh6VJ92uic8EPFrOno1SZBkhOxgroKwSX97AgMBAAE=
-----END RSA PUBLIC KEY-----
openssl rsa -pubin -in public_ -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA
78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x
yahLPcgCn/v8WcxqDUh6VJ92uic8EPFrOno1SZBkhOxgroKwSX97AgMBAAE=
-----END RSA PUBLIC KEY-----
可以看出转换的结果是一致的;
7. pkcs1公钥转换为pkcs8公钥
执行:openssl rsa -RSAPublicKey_in -in pub_ -pubout
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlLm5+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5
sdtmAvD2ex3wCef8lWmgdh5qUo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
可以看到和上面4,5的结果是一致的;
最后一点:
iOS上用的是pkcs8格式的公钥
openssl用的是pkcs1格式的公钥
知道私钥以后是可以导出公钥的,所以私钥一定要保证安全
知道公钥不可以导出私钥
问题:openssl 部署内部或外部命令
解决方案针对是window电脑。
解决方案一:
配置:SystemRoot/System32 环境变量。
1、邮件我的电脑-选择下【属性】。
2、选择高级系统设置
3、选择【高级】-【环境变量】
4、双击打开path,进行编辑
5、接着我们在这名字后面加【;System32】就可以了。
解决方案二:
安装Win64 OpenSSL,地址:
下载后根据提示一步一步安装,安装完成后:
双击 启动
青锋开源架构