1:将密码加密后存储,提高安全性
2:使用MD5加密方式对明文密码加密
MD5
MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,它能够产生一个128位(16字节)的散列值(哈希值),通常用一个32位的十六进制字符串表示。MD5被设计用来确保信息传输完整一致,常用于验证文件的完整性。
MD5的特点包括:
- 不可逆性:从MD5散列值几乎不可能反向推导出原始数据。
- 一致性:相同的数据总是产生相同的MD5散列值。
- 快速计算:MD5算法能够快速计算出数据的散列值。
尽管MD5广泛使用,但它也存在一些安全问题。由于MD5算法的弱点,它不再被认为是安全的散列函数,特别是在密码学应用中。MD5容易受到碰撞攻击,即找到两个不同的输入数据,它们产生相同的MD5散列值。
因此,MD5在需要高安全性的场合(如密码存储)中不再推荐使用。替代的散列函数,如SHA-256,提供了更高的安全性。
在编程中,MD5常用于验证数据的完整性,例如:
- 确认文件下载的完整性。
- 检查数据在传输过程中是否被篡改。
在PHP中,可以使用内置的 md5() 函数来生成数据的MD5散列值:
$data = "Hello, World!";
$md5Hash = md5($data);
echo $md5Hash; // 输出数据的MD5散列值
SHA-256
是一种加密散列函数,属于SHA-2(Secure Hash Algorithm 2)家族的一部分。SHA-256能够产生一个256位(32字节)的散列值,通常表示为一个64字符的十六进制字符串。与MD5相比,SHA-256提供了更高的安全性,因为它更难被破解或遭受碰撞攻击。
SHA-256的主要特点包括:
- 安全性:SHA-256被认为是非常安全的散列函数,适用于需要高安全性的场合。
- 一致性:相同的数据总是产生相同的SHA-256散列值。
- 不可逆性:从SHA-256散列值几乎不可能反向推导出原始数据
- 抗碰撞:与MD5相比,SHA-256更难遭受碰撞攻击。
- SHA-256常用于以下场合:
- 密码存储:在存储密码时,通常会使用SHA-256散列函数来存储密码的散列值,而不是存储明文密码。
- 数字签名:SHA-256散列值常用于数字签名,以验证数据的完整性和来源。
- 区块链技术:在区块链技术中,SHA-256用于创建区块的哈希值,确保区块链的安全性和完整性。

getBytes()
getBytes() 是 Java 中 String 类的一个方法,用于将字符串转换成字节数组。这个方法非常有用,特别是在需要将字符串以特定的字符编码转换为字节序列时。默认情况下,如果没有指定字符编码,getBytes() 方法会使用平台默认的字符编码来转换字符串。getBytes() 方法有几种不同的重载形式,允许你指定字符编码或字符集。以下是一些常见的重载形式:
String str = "Hello, World!";
byte[] bytes = str.getBytes();
使用指定字符集
String str = "Hello, World!";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
注意事项
字符编码:选择正确的字符编码非常重要,特别是当字符串包含非ASCII字符时。不同的字符编码可能会导致不同的字节序列,甚至可能导致数据损坏。
平台依赖性:默认字符编码依赖于平台,这意味着在不同的操作系统或配置中,相同的字符串可能会产生不同的字节序列。
错误处理:如果指定的字符编码不被支持,getBytes() 方法将抛出 UnsupportedEncodingException。因此,使用时可能需要处理这个异常。
DigestUtils.md5DigestAsHex
DigestUtils.md5DigestAsHex 方法接受一个字节数组作为输入(通过 data.getBytes() 转换),然后返回该数据的MD5散列值的十六进制表示
ASCII编码
ASCII编码使用7位二进制数(bit)来表示字符,因此它可以表示128个不同的字符,包括:
- 英文大小写字母(A-Z, a-z)
- 数字(0-9)
- 标点符号和特殊字符(如空格、标点符号、货币符号等)
- 控制字符(如换行符、回车符等)
由于ASCII只使用7位二进制数,它能够表示的字符数量有限,因此它主要适用于表示英文文本和一些基本的符号。对于其他语言和字符集,如中文、日文等,ASCII无法直接表示,需要使用其他编码标准,如Unicode。
在编程中,ASCII字符串通常用于处理英文文本数据。例如,在许多编程语言中,字符串字面量默认使用ASCII编码。对于需要处理非ASCII字符的场景,通常会使用扩展的字符编码标准,如UTF-8、UTF-16等。