一、对称加密算法
对称加密指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。
分组加密算法:AES、DES、Blowfish、CAST、IDEA、RC2、RC5
1、AES(推荐)
最常用的对称加密算法。
密钥建立时间短、灵敏性好、内存需求低(不管怎样,反正就是好)。
实际使用中,使用工作模式为 CTR(最好用 BC 去实现),此工作模式需要引入 IV 参数(16位的字节数组)。
密钥长度 128 / 192 / 256,其中 192 与 256 需要配置无政策限制权限文件(JDK6)。
填充模式最常用的两种 PKCS5Padding 和 PKCS7Padding,其中后者只有 BC 独有。
2、DES
已淘汰,是对称加密算法的基石,具有学习价值。
3、DESede(三重DES)
早于 AES 出现来替代 DES 。
计算密钥时间太长、加密效率不高,所以也基本上不用。
密钥长度112/168(JDK)、128/192(BC)
4、IDEA
常用的电子邮件加密算法。
工作模式只有 ECB 。
密钥长度128位
5、PBE
综合了消息摘要算法和对称加密算法,最常见的是 PBEWithMD5AndDES。
工作模式只有CBC(已丧失安全性,不推荐使用),所以PBE也不推荐使用了
二、非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密(公钥加密 - 私钥解密);如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密(私钥签名 - 公钥验签)。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
OpenSSL一共实现了 4 种非对称加密算法:DH 算法、RSA 算法、DSA 算法和椭圆曲线算法(EC)。
1、DH 算法
DH 是 Diffie-Hellman 的首字母缩写,是 Whitefield 与 Martin Hellman 在1976年提出了一个的密钥交换协议,故其一般用于密钥交换。
详情
2、RSA 算法(推荐)
既可以用于密钥交换、数字签名、数据加密。
3、DSA 算法
Digital Signature Algorithm,数字签名算法,只用于数字签名。
4、EC 算法
椭圆曲线算法
三、不可逆加密
上述一二都可以通过对应密钥来解密数据,不可逆加密不能反向解密得到密码原文
不可逆加密:【Hash加密算法/散列算法/摘要算法】
一旦加密就不能反向解密得到密码原文,一般用来加密用户密码,app的服务器端数据库里一般存储的也都是加密后的用户密码。
在数据传输的过程中,首先把密码类数据经过MD5加密算法加密,然后再在外面使用可逆的加密方式加密一次,这样在数据传输的过程中,即便数据被截获了,但是想要完全破解,还是很难的。
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
用途:一般用于效验下载文件正确性,一般在网站上下载文件都能见到;存储用户敏感信息,如密码、 卡号等不可解密的信息。
常见的不可逆加密算法有:MD5、SHA、HMAC