文章目录
- 三种分类
- 使用 MD5 加密存储
- 加盐存储
- Base64 编码:
- 常见的对称加密算法
- 常见的非对称加密算法
- https 传输加密
在开发中需要存储用户的密码,这个密码一定是加密存储的,如果是明文存储那么如果数据库被攻击了,密码就泄露了。
我们要对数据库的密码进行加密,那么就会问道常用的一些加密算法了。
三种分类
1.对称加密,密钥只有一个,加密和解密都是这个密码。
2.非对称加密,密钥是成对出现了,一个是公钥另一个是私钥。加密和解密使用不同的密钥。加密速度较慢,这个还可以结合 Https 去问.
3.Hash 算法,这是一种不可逆的算法,用于验证数据的完整性。但是可能会被暴力破解
使用 MD5 加密存储
创建一个 MessageDigest 创建一个 md5 的消息摘要,对 123456 进行加密.
public class MD5 {
public static void main(String[] args) throws NoSuchAlgorithmException {
// 创建一个MD5消息摘要
MessageDigest md5 = MessageDigest.getInstance("MD5");
// 计算字符串的MD5值
byte[] bytes = md5.digest("123456".getBytes());
// 输出MD5值
for (byte b : bytes) {
System.out.printf("%02x", b);
}
}
}
MD5 加密本身是不可逆向的,也就是不可破解,但可以建立 MD5 加密数据库,把常见的密码加密之后使用数据库存储起来.然后就能够实现破解.这样是非常不安全的.
加盐存储
可以在密码的前面或者后面加一个字符串,然后再进行加密,并且每次加密的都要不一样. 这个字符串叫做盐值,我们把这个盐存储到数据库中去,当用户登录的时候从数据库中再取出这个盐,进行密码的校验.
使用 UUID 生产不重复的字符串.进行加密
public static void main(String[] args) throws NoSuchAlgorithmException {
UUID uuid = UUID.randomUUID();
String str = uuid.toString().substring(0, 8);
// 创建一个MD5消息摘要
MessageDigest md5 = MessageDigest.getInstance("MD5");
// 计算字符串的MD5值
String password = str + "123456";
byte[] bytes = md5.digest(str.getBytes());
// 输出MD5值
for (byte b : bytes) {
System.out.printf("%02x", b);
}
}
即使相同的密码在数据库中存储的也是不一样的.
Base64 编码:
Base64 编码是将二进制的数据如图片、音频文件等信息打印成字符编码方式,使用 64 个字符 A-Z a-z 0-9 + / 来表示二进制数据。
二进制数据是 8 位一组,表示一个字节的,Base64 编码是按照 6 位一组的,每一个 Base64 编码字符代表 6 位二进制数据。
如果输入的数据不是三字节的的证书背书,会进行填充。
前面带上 前缀 用于在 html 页面中显示对应的图片。图片如果越大,对应的编码长度也就越大。
public static String prefix = "data:image/png;base64,";
public static String encodeImageToBase64(String imagePath) {
try {
// 读取图片文件
byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath));
// 使用 Java 8 Base64 类进行编码
return prefix+Base64.getEncoder().encodeToString(imageBytes);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
将生产的 Base64 便阿门直接复制到浏览器中就可以显示出来图片。
用途 用来执着前端页面的验证码信息,使用 Base64 编码。
常见的对称加密算法
只用一个密钥,如果密钥被泄露了那么会出现安全的问题.
https://blog.csdn.net/u014294681/article/details/86690241
常见的非对称加密算法
https://blog.csdn.net/u014294681/article/details/86705999
https 传输加密
https://segmentfault.com/a/1190000021494676
https 在交换证书的时候使用的是非对称加密,在传输过程中使用的还是对称加密的方式.