证书, ssl,CA加密与解密实战例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
加密与解密研究学习
编写:laich
Openssl RSA 加密与解密
理论
RSA是什么:RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。目前该加密方式广泛用于网上银行、数字签名等场合。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
OpenSSL是什么:众多的密码算法、公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法。
实践操作
以Java为例
这是windos7 下Openssl 路径:C:\openssl\bin
openssl version -a
先来生成私钥:
openssl genrsa -out rsa_private_key.pem 1024
会在bin 目录下生成
rsa_private_key.pem
生成的内容:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDbJkpMThepmY82P4wYACp1OB8e8zE66tGfTpfIQu5a/29O8KkQ UklbVgPKh+rNZHFT6srrr0sFEpbIc0CZc75S4aXd58K9+smVcizgijzKC+y47ggf zVBhXHsaEvEcH+IMAW7VKZ4rhdydYUgP+i+XmBTyhXc9cBhR2LoAuS/mDwIDAQAB AoGABKh2sdKDHD7AVYXaQ3RVcrJjrvO6Wyc8l2dDQKVzjYmaYxIodclZ99AHOpnS
+tSkuATolUPfk1cGz3HrsJdON0i02E/44U5DY1gVM1YJdJ5Wxwty1Hd57ph96yjy
cmH1Vl0UMRB4Cmaq0bYzpnmv0Ks1+nvMIacl8sE17RYHxqkCQQDtwkbgDHxb9o2E osy/7qCIapSOFui6sJaMCAgMFDOrhv7DRd3BTebVsKrjwJntty9Mr86UeGr+2Pqk FFIzDcO1AkEA6/aD83YRQs8PYEyef1ztdOrS66KTFpgPd/VufaeNaTJgyM8S2jxC
uGavl48OJz+OJckrs4BNJ0JMhHbytn3lMwJAMLJc7+C+y9soyyTJCPqoGKizupKI
okwu2Yl/lHHCz3v7zCUQMVpyUAw6RCGbpWuinXNYvWIYkBAC7f5Xg6trDQJBAK4w oWAM/NkQ+gzhAvCKrVDuOR5yOZsoTeMEb7ibBC1wXzpeg1BPxAFU7LM5i/01Ub5b
L8OnJ02gB9SR6sMFVTkCQAk0W60+Yn4jaXAtvxy9gMDfAeYoVz30quCZXWitc406 QFhQPj8In5dKF4Ku92BamEyzoj5X7OtTdbYCwEpTAbg=
-----END RSA PRIVATE KEY-----
根据私钥生成公钥
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
同样会在bin目录下生成rsa_public_key.pem
生成内容:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbJkpMThepmY82P4wYACp1OB8e 8zE66tGfTpfIQu5a/29O8KkQUklbVgPKh+rNZHFT6srrr0sFEpbIc0CZc75S4aXd
58K9+smVcizgijzKC+y47ggfzVBhXHsaEvEcH+IMAW7VKZ4rhdydYUgP+i+XmBTy
hXc9cBhR2LoAuS/mDwIDAQAB
-----END PUBLIC KEY-----
这时候的私钥还不能直接被使用,需要进行PKCS#8编码:
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocryp t
同样会在bin目录下生成pkcs8_rsa_private_key.pem
生成内容:
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANsmSkxOF6mZjzY/
jBgAKnU4Hx7zMTrq0Z9Ol8hC7lr/b07wqRBSSVtWA8qH6s1kcVPqyuuvSwUSlshz
QJlzvlLhpd3nwr36yZVyLOCKPMoL7LjuCB/NUGFcexoS8Rwf4gwBbtUpniuF3J1h
SA/6L5eYFPKFdz1wGFHYugC5L+YPAgMBAAECgYAEqHax0oMcPsBVhdpDdFVysmOu
87pbJzyXZ0NApXONiZpjEih1yVn30Ac6mdL61KS4BOiVQ9+TVwbPceuwl043SLTY
T/jhTkNjWBUzVgl0nlbHC3LUd3numH3rKPJyYfVWXRQxEHgKZqrRtjOmea/QqzX6
e8whpyXywTXtFgfGqQJBAO3CRuAMfFv2jYSizL/uoIhqlI4W6LqwlowICAwUM6uG
/sNF3cFN5tWwquPAme23L0yvzpR4av7Y+qQUUjMNw7UCQQDr9oPzdhFCzw9gTJ5/
XO106tLropMWmA939W59p41pMmDIzxLaPEK4Zq+Xjw4nP44lySuzgE0nQkyEdvK2 feUzAkAwslzv4L7L2yjLJMkI+qgYqLO6koiiTC7ZiX+UccLPe/vMJRAxWnJQDDpE
IZula6Kdc1i9YhiQEALt/leDq2sNAkEArjChYAz82RD6DOEC8IqtUO45HnI5myhN
4wRvuJsELXBfOl6DUE/EAVTsszmL/TVRvlsvw6cnTaAH1JHqwwVVOQJACTRbrT5i
fiNpcC2/HL2AwN8B5ihXPfSq4JldaK1zjTpAWFA+Pwifl0oXgq73YFqYTLOiPlfs
61N1tgLASlMBuA==
-----END PRIVATE KEY-----
至此,可用的密钥对已经生成好了,私钥使用pkcs8_rsa_private_key.pem,公钥
采用rsa_public_key.pem。
补充,第一步生成的私钥文件编码是PKCS#1格式,这种格式Java其实是支持的,只不过多写两行代码而已:
1.RSAPrivateKeyStructure asn1PrivKey = new RSAPrivateKeyStructure((ASN1Sequenc
e) ASN1Sequence.fromByteArray(priKeyData));
2.RSAPrivateKeySpec rsaPrivKeySpec = new RSAPrivateKeySpec(asn1PrivKey.getModu
lus(), asn1PrivKey.getPrivateExponent());
3.KeyFactory keyFactory= KeyFactory.getInstance("RSA");
4.PrivateKey priKey= keyFactory.generatePrivate(rsaPrivKeySpec);