附加(目前MD5,还有用RSA,速度稍慢,安全性更好)
关于加盐算法做了些自己的总结,
数据库中保存用户的密码,这些东西是很重要的。开发人员和内部认识如果获取到数据库,则很轻易的就得到大量密码信息。
因为目前MD5的数据量已经非常庞大了,如果只是简单的MD5加密,一些技术人员很容易通过反向查询摘要破解密码,为了安
全问题,我们可以对MD5摘要结果加入额外的信息,通常称作加盐。加盐只是对密码做了进一步的安全处理,对获取到加盐算
法的人同样是无效的,因为他可以很轻松的反向破解。
一个简单的加盐算法(转):
每次保存密码到数据库时,都生成一个随机16位数字,将这16位数字和密码相加再求MD5摘要,然后再摘要中再将16位数
字按照规则形成一个48位的字符串,再验证密码时再从48位字符串中按规则提取16位数字,和用户输入的密码相加再
MD5. 按这种方法形成的结果不能直接反查。且容易个密码每次保存时形成的摘要都是不同的。
package com.zving.framework.security;
import java.security.MessageDigest;
import java.util.Random;
import org.apache.commons.codec.binary.Hex;
/**
* @author wyuch
* @email wyuch@zving.com
* @date 2011-12-31
*/
public class PasswordUtil {
/**
* 生成含有随机盐的密码
*/
public static String generate(String password) {
int i1 = new Random().nextInt(99999999);
int i2 = new Random().nextInt(99999999);
String salt = String.valueOf(i1) + String.valueOf(i2);
if (salt.length() < 16) {
for (int i = 0; i < 16 - salt.length(); i++) {
salt += "0";
}
}
password = md5Hex(password + salt);
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);
return md5Hex(password + salt).equals(new String(cs1));
}
/**
* 获取十六进制字符串形式的MD5摘要
*/
public static String md5Hex(String src) {
try {
MessageDigest md5 = MessageDigest.getInstance("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));
}
}
分享到:
相关推荐
一个简单的MD5加盐算法,对存入数据库的密码进行加密达到保护用户信息的作用
对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载
输入需要加密的字符串,有两种加密方式,普通md5加密和加盐MD5加密。根据需要生成。
基于加盐BCrypt算法的电商安全模块设计及实现.pdf
网络安全问题日益严峻的今天,原始密码和简单非可逆加密算法已经不足以提供安全的系统服务,所以加盐加密技术使用越来越普遍。 本文档系统的介绍了加盐加密的原理和实现方案。 由四哥许坤整理发布,...
3. **“加盐”**: "加盐"是密码学中的一个术语,用于增强密码或密钥的安全性。在AES加解密中,盐通常是一个随机的预处理值,与原始密钥结合,生成一个新的、唯一的工作密钥。这样即使相同的明文和密钥被多次使用,...
在压缩包中的"MD5的实例(加盐)"文件,很可能是包含了一个具体的编程实现,例如用Python、Java或其他语言实现的MD5加盐过程的代码示例。这些示例通常会展示如何生成盐、如何拼接原始数据和盐、如何进行MD5哈希以及...
①密码加密:MD5 加盐算法实现密码的加密,基于原本的 MD5 加密算法进行加盐操作实现密码的加密。 ②拦截器:通过 SpringAOP 实现拦截器,对用户登录权限、异常通知等操作进行的统一处理,对返回响应数据进行统一...
为了增强安全性,我们引入了“加盐”(Salting)的概念。本文将详细介绍Java和SpringBoot如何实现加盐的MD5密码生成。 首先,MD5是一种单向哈希函数,它将任意大小的数据转换为128位的哈希值,通常以32位的十六进制...
MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐
本文将深入探讨如何设计并实现一个基于加盐BCrypt算法的电商安全模块,以增强账户信息的安全性,防止未授权访问和数据泄露。 BCrypt是一种广泛使用的密码哈希函数,特别适合存储用户密码。它结合了Blowfish加密算法...
3. 加盐(Salt)和初始化向量(IV):在哈希或对称加密中使用随机数据增加安全性。 4. 安全实践:遵循最佳实践,定期更新加密算法,防止因新出现的攻击方式导致数据泄露。 总之,VB加密解密算法在保护软件、数据...
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。...在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。...
本文将深入探讨Java中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...
一个多功能加密解密工具,支持QQtools、MD5、DES、AES、SHA256、Base64 等多种加密解密方式,并支持随机盐,附有源码,可直接编译使用。
《基于SM3与SM4算法的在线加解密系统详解》 在信息技术领域,数据安全是至关重要的。本文将深入探讨一个基于SM3和SM4算法的在线加解密系统,该系统旨在为任何类型的文件提供高效且安全的加密与解密服务。首先,我们...
在实际应用中,为了保障用户安全,应采用加密技术存储密码,例如哈希加盐算法,避免明文密码泄露。同时,系统应有权限管理,确保不同角色的用户只能访问和操作他们应有的信息。 最后,前端界面设计和后端服务的交互...
本案例主要关注的是如何利用Node.js的crypto模块来进行密码加密与解密,并且涉及到了密码加盐(salt)的策略。以下是对这两个关键知识点的详细说明。 首先,我们来看密码加密。在Node.js中,crypto模块是内建的,...
在这个“常用加密算法演示”中,我们主要探讨了三种常见的加密算法:SHA256加盐加密、AES ECB加密以及AES CBC加密。下面将详细介绍这些加密算法及其特点。 首先,SHA256是一种广泛使用的哈希函数,用于生成固定长度...
同时,敏感信息如用户密码需要进行加密存储,通常会使用哈希加盐算法。另外,为了保护用户隐私,聊天内容可能需要进行端到端加密,例如使用SSL/TLS协议。 在学习这个聊天小程序的源码时,我们可以深入理解小程序的...