目录
公私钥
私钥
modulus:
00:df:0b:f6:22:42:fe:81:a2:f2:fd:36:c5:fc:0d:
7b:1d:35:4d:79:6f:4a:2d:40:7f:0f:39:ec:e5:3a:
ee:66:24:14:c9:21:8a:ee:24:12:e5:f3:f9:ba:14:
71:54:f4:7e:9c:94:15:01:0a:8e:9d:b3:b5:fd:7b:
34:1f:0f:0d:b7
publicExponent: 65537 (0x10001)
privateExponent:
00:a4:20:a8:28:c4:05:85:9d:43:92:c2:98:63:86:
03:ff:15:37:02:51:bb:52:9b:30:24:23:2a:c7:ef:
5a:77:fb:5a:bd:9a:98:57:ae:2a:aa:fb:f3:c2:18:
b8:58:dc:4a:b5:bf:33:99:d7:07:89:b2:4e:9d:af:
35:c7:fb:47:49
prime1:
00:fc:90:04:d1:45:b5:6c:e7:11:cc:81:de:4a:2e:
6a:11:33:12:c2:d4:6f:94:25:57:e3:ba:a6:1f:76:
d0:5c:7b
prime2:
00:e2:15:1a:6b:f0:d6:36:e4:f0:14:b1:bc:3f:51:
1c:71:a3:2f:ef:6f:d5:63:fc:d7:ad:2a:68:ba:3a:
0b:e4:f5
exponent1:
00:d4:92:82:fb:80:a8:8a:d8:91:6a:87:84:08:fb:
b7:da:72:1a:40:51:7c:f8:3b:d6:15:9e:6b:63:e0:
24:cf:31
exponent2:
00:bf:42:e1:26:5e:09:ab:49:04:be:4d:1a:97:6a:
34:29:02:c8:23:c4:b5:7f:30:40:f9:b3:3e:04:05:
e5:58:1d
coefficient:
00:95:d0:8c:7e:4a:02:d2:27:17:85:4d:ab:47:5c:
2d:35:85:57:17:8e:99:35:15:13:85:9d:22:fe:d1:
25:b6:7a
-----BEGIN RSA PRIVATE KEY-----
MIIBPQIBAAJBAN8L9iJC/oGi8v02xfwNex01TXlvSi1Afw857OU67mYkFMkhiu4k
EuXz+boUcVT0fpyUFQEKjp2ztf17NB8PDbcCAwEAAQJBAKQgqCjEBYWdQ5LCmGOG
A/8VNwJRu1KbMCQjKsfvWnf7Wr2amFeuKqr788IYuFjcSrW/M5nXB4myTp2vNcf7
R0kCIQD8kATRRbVs5xHMgd5KLmoRMxLC1G+UJVfjuqYfdtBcewIhAOIVGmvw1jbk
8BSxvD9RHHGjL+9v1WP8160qaLo6C+T1AiEA1JKC+4CoitiRaoeECPu32nIaQFF8
+DvWFZ5rY+AkzzECIQC/QuEmXgmrSQS+TRqXajQpAsgjxLV/MED5sz4EBeVYHQIh
AJXQjH5KAtInF4VNq0dcLTWFVxeOmTUVE4WdIv7RJbZ6
-----END RSA PRIVATE KEY-----
参数说明:
modulus: 合数模 n
publicExponent 公开幂 e
privateExponent 私有幂 d
prime1 n的素数因子 p
prime2 n的素数因子 q
exponent1 d%(p-1)
exponent2 d%(q-1)
coefficient CRT系数 (q-1)%p
公钥
Modulus:
00:df:0b:f6:22:42:fe:81:a2:f2:fd:36:c5:fc:0d:
7b:1d:35:4d:79:6f:4a:2d:40:7f:0f:39:ec:e5:3a:
ee:66:24:14:c9:21:8a:ee:24:12:e5:f3:f9:ba:14:
71:54:f4:7e:9c:94:15:01:0a:8e:9d:b3:b5:fd:7b:
34:1f:0f:0d:b7
Exponent: 65537 (0x10001)
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAN8L9iJC/oGi8v02xfwNex01TXlvSi1A
fw857OU67mYkFMkhiu4kEuXz+boUcVT0fpyUFQEKjp2ztf17NB8PDbcCAwEAAQ==
-----END PUBLIC KEY-----
参数说明:
modulus: 合数模 n
Exponent 公开幂 e
公私钥终端生成
openssl生成密钥命令
生成强度是 512 的 RSA 私钥:$ openssl genrsa -out private.pem 512
以明文输出私钥内容:$ openssl rsa -in private.pem -text -out private.txt
校验私钥文件:$ openssl rsa -in private.pem -check
将私钥转换成 DER 格式:$ openssl rsa -in private.pem -out private.der -outform der
从私钥中提取公钥:$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout
以明文输出公钥内容:$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text
将公钥转换成 DER 格式:$ openssl rsa -in public.pem -out public.der -pubin -outform der
使用公钥加密:$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin
使用私钥解密:$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt
使用私钥签名:openssl dgst -sha256 -sign rsakeypair.pem -sigopt rsa_padding_mode:pss -out sig.bin 文件名.txt
使用公钥验签:openssl dgst -sha256 -verify pubkey.pem -sigopt rsa_padding_mode:pss -signature sig.bin 文件名.txt
证书
证书
证书和驾照很相似,里面记有姓名、组织、地址等个人信息,以及属于此人的公钥,并有认证机构施加数字签名,只要看到公钥证书,我们就可以知道认证机构认证该公钥的确属于此人
证书 = 公钥 + CA签名
目的是解决信任问题,如:防止中间人攻击
PKCS加密标准
Public-Key Cryptography Standards (PKCS)是由美国 RSA 数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议
目前协议有:PKCS#1 - PKCS#15
PKCS#1:
- 定义 RSA 公开密钥算法加密和签名机制,主要用于组织 PKCS#7 中所描述的数字签名和数字信封
- 专门用来加解密
PKCS#7:
- 定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7 与 PEM 兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息
- 根数字签名有关
PKCS#12:
- 描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法
- 苹果的开发者证书也俗称 P12
证书终端生成
生成私钥
openssl genrsa -out private.pem 1024
创建证书请求
openssl req -new -key private.pem -out rsacert.csr
生成证书并签名,有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
将 PEM 格式文件转换成 DER 格式
openssl x509 -outform der -in rsacert.crt -out rsacert.der
导出P12文件
openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
注意:在iOS开发中,不能直接使用 PEM 格式的证书,因为其内部进行了Base64编码,应该使用的是DER的证书,是二进制格式的,OpenSSL默认生成的都是PEM格式的证书
P12导出公私钥
//1.生成1.key文件
openssl pkcs12 -in apple_payment.p12 -nocerts -nodes -out 1.key
//2.导出私钥
openssl rsa -in 1.key -out apple_pay_pri.pem
writing RSA key
//3.导出公钥
openssl rsa -in 1.key -pubout -out apple_pay_pub.pem
行者常至,为者常成!