1.加密的概念
加密是指将数据转换为无法直接读取或理解的形式,以保护数据的安全性和机密性。加密可以防止未经授权的人员访问和理解敏感数据,即使数据在传输过程中被窃取,也无法解读其中的内容。
1.1 加密的分类
在软件开发中,常见的加密技术包括对称加密和非对称加密
1.1.1 对称加密
使用相同的密钥对数据进行加密和解密。发送方和接收方必须共享同一个密钥。常见的对称加密算法有DES、AES等。
AES (Advanced Encryption Standard) | 推荐使用密钥长度为 128 比特、192 比特或 256 比特 |
3DES (Triple Data Encryption Standard) | 推荐使用密钥长度为 168 比特 |
1.1.2 非对称加密
使用公钥和私钥两个不同的密钥进行加密和解密。发送方使用接收方的公钥加密数据,接收方使用自己的私钥解密数据。常见的非对称加密算法有RSA、ECC等。
RSA (Rivest-Shamir-Adleman) | 推荐使用密钥长度为 2048 比特或更长,较高的密钥长度提供更高的安全性 |
ECC (Elliptic Curve Cryptography) | 推荐使用椭圆曲线参数的长度,如 NIST 推荐的 P-256、P-384 或 P-521 |
1.1.3 散列函数
散列函数单项不可逆,主要应用是数据完整性校验和唯一标识。通过比较散列值,可以验证数据在传输或存储过程中是否发生了变化
SHA-256 (Secure Hash Algorithm) | 常用于生成消息摘要,长度为 256 比特 |
SHA-3 (Secure Hash Algorithm 3) | 提供不同长度的散列函数,如 SHA3-256、SHA3-384 和 SHA3-512 |
1.2 加密流程
[此处以MD5为例]
MD5 (Message Digest Algorithm 5) 是一种广泛使用的散列函数,用于生成消息的摘要或哈希值。然而,需要注意的是,MD5 不是一个安全的加密算法,因为它存在多个漏洞,容易受到碰撞攻击和预映像攻击。因此,在安全性要求较高的情况下,不建议使用 MD5 进行加密。
1.导入DigestUtils类(这是Spring Framework 提供的一个实用类,用于进行各种散列算法的哈希操作,如MD5、SHA-1、SHA-256 等)
import org.springframework.util.DigestUtils;
2.调用MD5的方法加密
DigestUtils.md5DigestAsHex("要加密的数据".getBytes());
3.获取用户输入的数据并加密对比两者是否相等
if(user!=null && DigestUtils.md5DigestAsHex(loginVo.getPassword().getBytes()).equals(user.getPassword()))