常见的七种加密算法 以及实现
数字签名、信息加密是前后端开发经常使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等。不同应用场景可能需要搭配不同的应用算法来实现。
数字签名
数字签名,通过可鉴别的数字信息验证 自身身份的一种方式,可以理解为现实生活当中身份证的身份证号码。
一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。发送者持有私钥,接收者持有私钥对应的公钥。能够在接受到来自发送者信息时用于验证其身份。
加密和解密
- 加密
- 数据加密的基本过程,就是对原来为明文的文件或按照某种算法进行处理,让其成为不可读的一段代码,通常称为密文。用于保护数据不被人获取,窃取。
- 解密
- 加密的逆过程为解密,即将该编码信息转化为其原来数据的过程
对称加密和非对称加密
加密算法份对称加密和非对称加密,其中对称加密的算法与解密密钥相同,非对称加密算法的加密密钥与解密密钥不同,此外还有一类不需要密钥的散列算法。
常见的对称加密算法主要有
DES
3DES
AES
等,常见的非堆成算法主要有RSA
DSA
等,散列算法主要有SHA-1
MD5
等对称加密
对称加密算法时应用较早的加密算法,又称为共享密钥加密算法。在对称加密算法中,使用的密钥只有一个,发送和接送双方都使用这个密钥对数据进行加密和解密。
数据加密过程:在对称加密算法中,数据发送将铭文和加密密钥一起经过特殊加密处理,生成复杂的加密密文进行发送
数据解密过程:数据接收方收到密文后,若相等读取原数据,则需要使用加密密钥及相同的逆算法进行解密,恢复成明文
非对称加密
非对称加密算法(公开密钥加密算法),它需要2个密钥,一个public Key,一个private Key。因为加密和解密使用的是2个不通的密钥,所以这种算法称为非对称加密算法。
- 如果公钥对数据进行加密。只有对应的私钥才能进行解密
- 如果使用私钥对数据进行加密,只有对应的公钥才能进行解密。
比如A用户生成了一对密钥,然后把公钥公开给B 。B使用公钥加密发送给A。A再使用自己保存的私钥去解密。
常见的签名加密算法
MD5算法
MD5用的是hash函数,它的典型应用是对一段信息摘要,以防止被篡改,严格来说,MD5不是一种加密算法,而是摘要算法,无论多长的输入,MD5都会输出长度为32个字符的一个字符串。
//采用MD5加密算法 MessageDigest md = MessageDigest.getInstance("MD5"); //加密 byte[] digest = md.digest("123456".getBytes());
SHA1算法
SHA1是和M5一样的消息摘要算法,然而SHA1比MD5的安全性更强。
//采用MD5加密算法 MessageDigest md = MessageDigest.getInstance("SHA1");
HMAC算法
HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息未输入,生成一个消息摘要作为输出。
HMAC在多线程环境下是不安全的。如果需要在多线程访问的时候,进行同步的辅助类,使用ThreadLocal为每个线程缓存一个实例可以避免进行锁操作。
AES/DES/3DES算法
AES\DES\3DES都是对称的块加密算法发,加解密的过程是可逆的,常用的有AES128/AES192/AES256。
DES算法
DES加密算法是一种分组密码,以64位分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。
3DES算法
基于DES的堆成算法,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES加密算法
AES 加密算法是密码学中的高级加密标准,该加密算法采用分组密码体制,密钥长度最少支持位128、192、256,分组长度128位,算法应易于各种硬件和软件实现。
AES 本身就是为了取代DES。AES具有更好的安全性,效率和灵活性
RSA算法
RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个同时用于加密和数字签名的算法。它能够抵抗到目前为止已知 的所有密码攻击。
ECC算法
ECC也是一种非对称加密算法,主要优势是在某些情况下,它比其他的方法使用更下的密钥,比如RSA加密算法,提供相当或更高等级的安全级别。不过一个缺点是加密和解密操作的实现比其他机制时间长。(CPU消耗严重)
对称算法
密钥管理:比较难,不适合互联网,一般用于内部系统。
安全性:中
加密速度:快好几个数量级 (软件加解密速度至少快100
倍,每秒可以加解密数M
比特数据),适合大数据量的加解密处理。非对称算法
密钥管理:密钥容易管理。
安全性:高
加密速度:比较慢,适合 小数据量加解密或数据签名。