概述
对称加密算法是因为秘钥的对称而由来的,而非对称加密算法是因为和对称加密相反的原理来实现的,是高级的,举个例子:
银行的保险柜,肯定是银行工作人员拿着他自己那把钥匙,加上事主自己那把钥匙,共同才能打开保险柜的,这种方式我们叫做双保险。
非对称加密算法是分公钥、私钥,公钥是非安全的方式(公开)发放的,私钥自己保存。公钥、私钥通常情况都是成对出现的,使用公钥加密的数据只能使用和它一对的私钥来解密,反之亦然。注意一点:在非对称加密算法里,有些算法可以公钥加密私钥解密、私钥加密公钥解密都支持的,有的只支持一种方式。
DH(Diffie-Hellman)秘钥交换算法
对称加密算法的秘钥管理复杂,避免秘钥传递过程中的泄露成为了一个困扰。因此,出现了秘钥交换算法,它是怎么解决的呢?是通过构建本地秘钥来解决的,但是构建的本地秘钥对于双方来说是一致的,也是一种对称的行为。
秘钥长度 | 默认长度 | 工作模式 | 填充方式 | 实现方 |
---|---|---|---|---|
512~1024(64的倍数) | 1024 | 无 | 无 | JDK |
算法实现涉及到的类介绍
-
初始化发送方秘钥
- KeyPairGenerator:生成秘钥的载体
- KeyPair:密钥的载体
- PublicKey:公钥
//创建KeyPairGenerator对象 KeyPairGenerator senderKeyPairGenerator=KeyPairGenerator.getInstance("DH");
-
初始化接收方秘钥
- KeyFactory:秘钥工厂,作用是生成秘钥,也可以说是通过秘钥的规范来还原秘钥 ,方法generatePublic()、generatePrivate()
- X509EncodedKeySpec:根据ASN.1标准进行秘钥编码
- DHPublicKey:DH专门提供的公钥的具体形式
- DHParameterSpec:DH算法使用的参数的集合,就是DH中使用的参数通常都是放到这个类里使用
- KeyPairGenerator:生成KeyPair的类
- PrivateKey:私钥
-
秘钥构建
- KeyAgreement:提供秘钥一致性(或秘钥交换)协议的功能
- SecretKey:秘密秘钥,存在的唯一目的是为了生成一个分组的秘密秘钥,同时提供了类型安全的操作
- KeyFactory
- X509EncodedKeySpec
- PublicKey
-
加密、解密
- Cipher:为加密、解密提供密码功能的类,它是JCE框架的核心内容,通过工厂方法创建实例
demo见 :
RSA-基于因子分解
DH算法为非对称加密提供了一个好的基础,RSA就是在这个基础上提供的一个好的算法,是被广泛接受实现的公开算法,有的人说它已经成为非对称加密的标准,当然这不是官方的机构的说法,是事实上的标准。
特点是不仅仅在数据加密时候用到,也在数字签名的时候用到。它有公钥加密私钥解密、公钥解密私钥加密两种方式,它比DES来说比较慢。
基于的是大因数分解比较难数学难题的一个算法。
秘钥长度 | 默认长度 | 工作模式 | 填充方式 | 实现方 |
---|---|---|---|---|
512~65536(64的倍数) | 1024 | ECB | NoPadding、PKCS1Padding、OAEPWITHMD5AndMGF1Pading、OAEPWITHSHA1AndMGF1Pading、OAEPWITHSHA256AndMGF1Pading、OAEPWITHSHA384AndMGF1Pading、OAEPWITHSHA512AndMGF1Pading | JDK |
512~65536(64的倍数) | 2048 | NONE | NoPadding、PKCS1Padding、OAEPWITHMD5AndMGF1Pading、OAEPWITHSHA1AndMGF1Pading、OAEPWITHSHA224AndMGF1Pading、OAEPWITHSHA256AndMGF1Pading、OAEPWITHSHA384AndMGF1Pading、OAEPWITHSHA512AndMGF1Pading、ISO9796-1Padding | BC |
ElGamal-基于离散对数
和RSA不同的是,一:只提供公钥加密私钥解密算法,不提供私钥加密公钥解密,二:JDK里没有实现,Bouncy Castle有实现。这个算法在构建秘钥的时候和RSA几乎是相同的,说是RSA的补充也好,说是和RSA共同构成了非对称加密的算法实现也好,jdk是没有提供的,BC提供了。生成秘钥对后,公钥可以通过安全、非安全的方式发送给对方,其实公钥通过安全、非安全的方式发送给对方并没有那么重要了。
秘钥长度 | 默认长度 | 工作模式 | 填充方式 | 实现方 |
---|---|---|---|---|
160~16384(8的倍数) | 1024 | ECB、NONE | NoPadding、PKCS1Padding、OAEPWITHMD5AndMGF1Pading、OAEPWITHSHA1AndMGF1Pading、OAEPWITHSHA224AndMGF1Pading、OAEPWITHSHA256AndMGF1Pading、OAEPWITHSHA384AndMGF1Pading、OAEPWITHSHA512AndMGF1Pading、ISO9796-1Padding | BC |