目录
一、数字签名
二、摘要算法
三、对称加密算法
四、非对称加密算法
五、代码实践
六、总结
一、数字签名
(1)数字签名:一套数字签名定义两种[互补]的运算, 一种用于[签名], 一种用于[验证]
(2)发送者[密钥], 接受者[公钥]: 发送者持有代表自己身份的[私钥], 接受者持有与私钥对应的[公钥], 对接受发送者消息时用于[验证]其身份
(3)用途: 唯一证明发送方的身份, 防止中间人攻击 / CSRF跨域身份伪造, 通常用于用户认证
二、摘要算法
#1.MD5摘要算法
(1)MD5不是一种加密算法, 而是摘要算法
(2)使用哈希函数, 对一段消息产生消息摘要, 以防止篡改, 无论多长的输入, MD5都会输出长度为128bits的串,通常为32个字符(16进制表示)
#2.SHA1摘要算法
(1)和MD5一样, 是消息摘要算法, 但比MD5安全性更强
(2)对于长度小于2^64位的消息, 产生一个160bits的消息摘要
(3)场景: 基于MD5, SHA1消息摘要特性以及不可逆(一般来说), 可用于检查文件完整性以及数字签名
三、对称加密算法
#1.DES算法
(1)对称加密, 加密解密同一算法, 加解密是可逆的
(2)以64位为一组对数据进行加密, 密钥长度为56位
(3)密钥保密 | 算法公开: 所以只要掌握了和发送方相同密钥的人就能解读DES加密过的密文数据, 因此对于56位的密钥来说, 如果用穷举法, 运算次数为2^56次
#2.3DES算法
(1)基于DES的对称算法,对 一块数据用三个不同的密钥进行三次加密,强度更高。
#3.AES算法
(1)密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位, 相比DES,AES具有更好的安全性、效率和灵活性。
四、非对称加密算法
#1.RAS算法
(1)能同时用于加密和数字签名的算法
(2)最有影响力的公钥加密算法,
论点: 将两个大素数相乘十分容易,但想要对其乘积进行[因式分解]却极其困难,因此可以将[乘积]公开作为加密密钥。
五、代码实践
public class DigestUtil {
public static final byte[] computeMD5(byte[] content) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return md5.digest(content);
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
}
public static byte[] computeSHA1(byte[] content) {
try {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
return sha1.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
六、总结
散列算法
算法名称 | 安全性 | 速度 |
---|---|---|
MD5 | 中 | 快 |
SHA1 | 高 | 慢 |
对称加密
算法名称(密钥) | 安全性 | 速度 |
---|---|---|
DES(56位) | 低 | 快 |
3DEC(112位 / 116位) | 中 | 慢 |
AES(112/192/256位) | 高 | 快 |
非对称加密
算法名称 | 安全性 | 速度 |
---|---|---|
RSA | 高 | 中 |
ECC | 高 | 慢 |
#1.对称算法
(1)密钥管理: 比较难, 不适合互联网, 一般用于内部系统
(2)安全性: 中
(3)加密速度: 快, 适合大数据量的加解密处理
#2.非对称算法
(1)密钥管理: 比较容易
(2)安全性: 高
(3)加密速度: 比较慢, 适合小数据量的加解密处理以及数字签名