我的博客网:https://wushaopei.github.io/ (你想要这里多有)
1、概述
由于加密和解密使用的是两个不一样的密钥,因此这种算法叫做非对称加密算法.html
非对称加密算法须要两个密钥:公开密钥和私有密钥. 公开密钥与私有密钥是一对的,这两个共同组成一个解钥,才能实现解密。java
特色: 高级、双保险git
种类:github
- DH(Diffie-Hellman)密钥交换算法
- RSA——基于因子分解 ,RSA是能够双向加密的:私钥加密,公钥解密;公钥加密,私钥解密。
- EIGamal——基于离散对数
- ECC(Elliptical Curve Cryptography)——椭圆曲线加密
说明:若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密. 若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密(某些算法有提供). 非对称加密算法实现机密信息交换的基本过程是: 甲方生成一对密钥并将其中的一把做为公用密钥向其它方公开,获得该公用密钥的乙方使用该密钥对信息进行加密后再发送给甲方. 甲方再用本身保存的另外一把专用密钥对加密后的信息进行解密. 另外一方面,甲方可使用乙方提供的公钥对信息进行加密后再发送给乙方,乙方再用本身的私匙对数据进行解密.web
2、密钥交换算法DH
一、DH算法概述
DH 对称加密算法:数据安全、密钥管理复杂、密钥传递过程复杂(存在密钥泄露问题)算法
非对称加密算法的特色:apache
算法强度复杂、安全性依赖于算法与密钥.可是因为算法复杂,使得非对称算法加解密速度没有对称算法加解密的速度快.安全
对称密钥体制中只有一种密钥,而且是非公开的,若是要解密就得让对方知道密钥.因此保证其安全性就是保证密钥的安全.app
非对称密钥体制有两种密钥,其中一个是公开的,这样就能够不须要像对称密码那样向对方传输密钥了.所以安全性就大了不少.ide
对称密钥与非对称密钥比较:
- 算法复杂度:对称密钥<非对称密钥
- 加解密速度:对称密钥>非对称密钥
- 安全性:对称密钥<非对称密钥
二、DH算法实现过程及相关类详解
【1】DH加密算法 密钥交换:
初始化发送方密钥,如:
- KeyPairGenerator
- KeyPair
- PublicKey
初始化接收方密钥,如:
- KeyFactory
- X509EncodedKeySpec
- DHPublicKey
- DHParameterSpec
- KeyPairGenerator
- PrivateKey
【2】密钥构建
- KeyAgreement
- SecreKey
- Keyactory
- X509EncodedKeySpec
- PublicKey
static KeyAgreement getInstance(String algorithm)
生成实现指定密钥一致算法的KeyAgreement对象
【3】加密、解密
- Cipher
三、DH算法实现
执行结果:
双方密钥相同
jdk dh eccrypt :Ra+RRytG7xw=
jdk dh decrypt : wen-min
四、DH加密算法的消息传递机制:
1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方经过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,而后经过本地密钥加密数据,发送给乙方加密后的数据;乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,而后经过本地密钥对数据解密。3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,而后经过本地密钥加密数据,发送给甲方加密后的数据;甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,而后经过本地密钥对数据解密。