/**
* 生成含有随机盐的密码
*/
public static String generate(String password) {
int i1 = new Random().nextInt(99999999);//生成第一个随机数
System.out.println("生成第一个随机数i1="+i1);
int i2 = new Random().nextInt(99999999);//生成第二个随机数
System.out.println("生成第二个随机数i2="+i2);
String salt = String.valueOf(i1) + String.valueOf(i2);
System.out.println("盐="+salt);//生成盐
if (salt.length() < 16) {
for (int i = 0; i < 16 - salt.length(); i++) {
salt += "0";
}
}
password = md5Hex(password + salt);
System.out.println("加盐后的password="+password);
char[] cs1 = password.toCharArray();
char[] cs2 = salt.toCharArray();
char[] cs = new char[48];
for (int i = 0; i < 48; i += 3) {
cs[i] = cs1[i / 3 * 2];
cs[i + 1] = cs2[i / 3];
cs[i + 2] = cs1[i / 3 * 2 + 1];
}
return new String(cs);
}
/**
* 校验密码是否正确
*/
public static boolean verify(String password, String md5) {
char[] cs = md5.toCharArray();
char[] cs1 = new char[32];
char[] cs2 = new char[16];
for (int i = 0; i < 48; i += 3) {
cs1[i / 3 * 2] = cs[i];
cs1[i / 3 * 2 + 1] = cs[i + 2];
cs2[i / 3] = cs[i + 1];
}
String salt = new String(cs2);
System.out.println("验证salt="+salt);
return md5Hex(password + salt).equals(new String(cs1));
}
/**
* 获取十六进制字符串形式的MD5摘要
*/
public static String md5Hex(String src) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");//获取md5的一个加密
byte[] bs = md5.digest(src.getBytes());
return new String(new Hex().encode(bs));
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
String password = generate("admin");//秘钥
System.out.println(verify("admin", password));
}
分享到:
相关推荐
本文将详细介绍Java和SpringBoot如何实现加盐的MD5密码生成。 首先,MD5是一种单向哈希函数,它将任意大小的数据转换为128位的哈希值,通常以32位的十六进制字符串表示。其优点是计算速度快,但缺点是容易遭受彩虹...
因此,现代密码存储通常采用更安全的算法,如SHA-256或bcrypt,并结合加盐(salt)和多次迭代以提高安全性。 总的来说,MD5在Java中的使用提供了一种简单的密码加密方式,但随着技术的发展,开发者应考虑使用更强大...
对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载
加盐是随机生成一段数据并附加到原始密码之前或之后,然后再进行哈希运算,这样即使相同的密码也会产生不同的哈希值,增加破解难度。例如,可以使用`SecureRandom`类生成盐值: ```java import java.security....
在压缩包中的"MD5的实例(加盐)"文件,很可能是包含了一个具体的编程实现,例如用Python、Java或其他语言实现的MD5加盐过程的代码示例。这些示例通常会展示如何生成盐、如何拼接原始数据和盐、如何进行MD5哈希以及...
密码哈希盐加密测试例子,一个不可反算的,绝对安全的加密
网络安全问题日益严峻的今天,原始密码和简单非可逆加密算法已经不足以提供安全的系统服务,所以加盐加密技术使用越来越普遍。 本文档系统的介绍了加盐加密的原理和实现方案。 由四哥许坤整理发布,...
例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码...
在加盐过程中,盐通常与密码一起存储,并在解密时使用同样的盐进行解密。 `aes256.cpp`和`aes256.h`文件很可能是定义了加密和解密类的实现和接口。这些文件可能包含了初始化AES环境、设置密钥和盐、执行加密和解密...
一个简单的MD5加盐算法,对存入数据库的密码进行加密达到保护用户信息的作用
为了增加安全性,通常会结合加盐(Salt)策略,即在密码前或后添加一个随机字符串再进行MD5加密,这样即使两个用户使用相同的密码,其加密结果也会不同,从而降低彩虹表攻击的风险。此外,还可以使用多次迭代的哈希...
校验含盐值的SHA-256,通常是在存储密码或其他敏感信息时,先对原始信息加上盐值进行哈希,然后将盐值和哈希值一起存储。在验证时,再次使用相同的盐值对输入信息进行哈希,比较两次哈希结果是否一致。 3. **生成...
本文将详细讲解如何在Java中使用MD5进行数据加密。首先,你需要了解MD5的基本原理:MD5算法通过一系列复杂的数学运算,将输入的数据转化为一个固定的128位摘要,这个摘要对于原始数据是唯一的,但即使只改变输入数据...
在Java中,MD5通常被用来对敏感数据进行单向加密,如密码存储,防止数据泄露。下面我们将详细讨论Java中MD5加密的原理、使用场景以及如何实现。 MD5加密的基本原理: MD5算法是一种非对称的加密算法,它将输入的...
然而,这些也面临着潜在的碰撞攻击,因此推荐使用带有加盐和迭代的强密码存储方法。 7. **文件完整性检查**:MD5也可用于验证文件下载后的完整性。服务器会提供文件的MD5校验和,客户端下载文件后计算其MD5值并与...
SSHA(Salted SHA,加盐SHA)是一种增强版的SHA哈希算法,它在原始的SHA哈希基础上增加了一个随机的盐值,以提高密码的安全性。在Java中,SSHA常用于用户密码的存储,以防止彩虹表攻击。在本教程中,我们将深入探讨...
在生产环境中,密码应当被哈希和加盐后存储,而不是明文保存。Java中可以使用`MessageDigest`类进行哈希计算,或者使用Spring Security等框架提供的加密服务。 3. **权限控制**:一旦用户登录成功,我们可能还需要...
- **密码存储**:不要明文存储密码,应使用加盐哈希算法进行加密。 - **验证码**:在登录页面添加验证码可以防止恶意的自动化尝试。 - **多因素认证**:除了密码,还可以加入手机短信验证或邮箱验证,提高安全性。 -...
它通过在原始密码前或后附加一个随机字符串,然后进行哈希运算,使得即使是相同的密码,经过加盐处理后得到的哈希值也会大不相同,从而增加了密码的安全性。 MD5(Message-Digest Algorithm 5)是一种广泛使用的...
通过上述分析,我们了解了MD5算法的基本原理及其实现方式,并学习了如何在Java中使用加盐散列技术增强密码的安全性。这种方式在实际应用中非常有用,尤其是在需要保护用户隐私和数据安全的场合。