证书, ssl,CA加密与解密实战例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档