我们以前的加密方法是否对这种行为失效了呢?其实只要稍微混淆一下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(用户自定义密码)中加入其它成分(一般是用户自有且不变的因素),以此来增加系统复杂度。当这种盐和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。下面请见代码:
// 对密码进行加盐后加密,加密后再通过Hibernate往数据库里存 String changedPswd=DigestUtils.md5Hex(name+pswd);
就是这样简单,上面代码中盐就是用户名,可以的话还可以用用户注册时的邮件,注册时间等非空信息(如果是空信息这个加盐处理会失效)。
下面是数据库中两个用户的记录,他们的实际登录密码都是123456,但光看用户记录是完全看不出来的。这下别有用心的人打开数据库看到的密码都完全不一样,他以前的手段就失效了。
因为密码是md5处理的密码加用户名,因为用户名都不相同,所以即使密码相同的用户,保存到数据库中密码也是不同的。
import org.apache.commons.codec.digest.DigestUtils;
public class AtomicDemo extends Thread{
public static String key="keys";
public static void add(int i) throws InterruptedException{
System.out.println(DigestUtils.shaHex(key)+"======"+i+"======="+DigestUtils.shaHex(key+i));
}
public void run() {
for (int i = 0; i < 10; i++) {
try{
add(i);
sleep(10);
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception{
Thread thread=new AtomicDemo();
thread.start();
}
}
运行结果
5944ae25418ceabcf285dca1d721b77888dac89b======0=======fb61f74ca71dc6d48c7457f5e16b3552f06f0c8d
5944ae25418ceabcf285dca1d721b77888dac89b======1=======5c26398bddc6a83d04a0f2c99b6d48aaaeefca7d
5944ae25418ceabcf285dca1d721b77888dac89b======2=======054a54de9e39630979ffccad0294bccb9e648ea2
5944ae25418ceabcf285dca1d721b77888dac89b======3=======a32cfde3c1f0041ac5f5d4b8d89522b5094c9804
5944ae25418ceabcf285dca1d721b77888dac89b======4=======de5710c8cedbf9b2c4ae26f10ed845b15118db01
5944ae25418ceabcf285dca1d721b77888dac89b======5=======c1523fc3afabfb5db883605324252c79787938b9
5944ae25418ceabcf285dca1d721b77888dac89b======6=======60803f24f49154d9e65a4acf9c7c6b1cb130c8f2
5944ae25418ceabcf285dca1d721b77888dac89b======7=======881a14c6013d51ca24f152973a1fd51da37d1143
5944ae25418ceabcf285dca1d721b77888dac89b======8=======ef15a93a59f824a73fe1c054140f15f200b8a4b2
5944ae25418ceabcf285dca1d721b77888dac89b======9=======d44cc54ccf1e357922c5878df32e078084b0c531
可以比对出加盐之前和之后的结果
分享到:
相关推荐
本文将详细介绍Java和SpringBoot如何实现加盐的MD5密码生成。 首先,MD5是一种单向哈希函数,它将任意大小的数据转换为128位的哈希值,通常以32位的十六进制字符串表示。其优点是计算速度快,但缺点是容易遭受彩虹...
本案例主要关注的是如何利用Node.js的crypto模块来进行密码加密与解密,并且涉及到了密码加盐(salt)的策略。以下是对这两个关键知识点的详细说明。 首先,我们来看密码加密。在Node.js中,crypto模块是内建的,...
计算机后端-PHP视频教程. php之thinkphp132 注册密码加盐.wmv
### 关于Python中密码加盐的学习体会小结 在网络安全领域,为了保护用户信息的安全,密码的加密方式显得尤为重要。本文将详细介绍如何在Python中使用密码加盐技术,并结合具体的代码示例进行深入分析。 #### 密码...
对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载
一个多功能加密解密工具,支持QQtools、MD5、DES、AES、SHA256、Base64 等多种加密解密方式,并支持随机盐,附有源码,可直接编译使用。
密码哈希盐加密测试例子,一个不可反算的,绝对安全的加密
网络安全问题日益严峻的今天,原始密码和简单非可逆加密算法已经不足以提供安全的系统服务,所以加盐加密技术使用越来越普遍。 本文档系统的介绍了加盐加密的原理和实现方案。 由四哥许坤整理发布,...
一个简单的MD5加盐算法,对存入数据库的密码进行加密达到保护用户信息的作用
对他们的密码加盐,将它们保存到磁盘。 用法 将 leveldb 实例传递给Users构造函数。 如果您的数据库在网络上,我建议使用来存储数据库的元数据和 。 有关客户端支持,请参阅 。 var db = level ( './db' ) var ...
本文主要介绍了几种常见的破解密码的方法,为密码加盐(Salt)以及在.NET中的实现等。具有一定的参考价值,下面跟着小编一起来看下吧
但需要注意的是,由于MD5本身存在碰撞问题(即不同的输入可能会产生相同的哈希值),现代密码学建议使用更安全的哈希函数,如SHA-256或bcrypt,配合加盐,以提供更强的密码保护。 在压缩包中的"MD5的实例(加盐)...
因此,现代密码存储通常采用更安全的算法,如SHA-256或bcrypt,并结合加盐(salt)和多次迭代以提高安全性。 总的来说,MD5在Java中的使用提供了一种简单的密码加密方式,但随着技术的发展,开发者应考虑使用更强大...
"加盐"是密码学中的一个术语,用于增强密码或密钥的安全性。在AES加解密中,盐通常是一个随机的预处理值,与原始密钥结合,生成一个新的、唯一的工作密钥。这样即使相同的明文和密钥被多次使用,每次加密的结果也会...
综上所述,MD5算法在密码存储中的安全性已不再可靠,需要结合盐值和其他强化措施,如使用更安全的哈希算法(如SHA系列),以及密码加盐、迭代哈希等方法,以提升密码存储的安全性。在实际应用中,应当重视密码策略,...
哈希是一种不可逆的转换过程,将原始数据转化为固定长度的字符串,而加盐则是为了增加破解哈希的难度,通过在原始密码前或后添加随机数据,使得即使相同的密码哈希后也变得独一无二。 "password"在这里显然是指需要...
在加盐过程中,盐通常与密码一起存储,并在解密时使用同样的盐进行解密。 `aes256.cpp`和`aes256.h`文件很可能是定义了加密和解密类的实现和接口。这些文件可能包含了初始化AES环境、设置密钥和盐、执行加密和解密...
密码加salt是一种常见的信息安全技术,用以提高密码安全性。为了深入理解密码加salt的原理,我们首先要明白直接散列密码的危险性。当使用散列算法处理密码时,如MD5、SHA等,相同的明文密码总是产生相同的散列值。这...