`

加盐算法

    博客分类:
  • work
 
阅读更多

附加(目前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));
	}
}
分享到:
评论
1 楼 iwangyiyx2 2016-01-10  

相关推荐

    MD5加盐算法 含mysql数据库

    一个简单的MD5加盐算法,对存入数据库的密码进行加密达到保护用户信息的作用

    java实现Md5加盐加密算法

    对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载

    C#MD5加密--加盐MD5加密C#MD5加密C#MD5加密

    输入需要加密的字符串,有两种加密方式,普通md5加密和加盐MD5加密。根据需要生成。

    基于加盐BCrypt算法的电商安全模块设计及实现.pdf

    基于加盐BCrypt算法的电商安全模块设计及实现.pdf

    加盐加密保存的通用方案

    网络安全问题日益严峻的今天,原始密码和简单非可逆加密算法已经不足以提供安全的系统服务,所以加盐加密技术使用越来越普遍。 本文档系统的介绍了加盐加密的原理和实现方案。 由四哥许坤整理发布,...

    AES 128位加解密C++源码(加盐)

    3. **“加盐”**: "加盐"是密码学中的一个术语,用于增强密码或密钥的安全性。在AES加解密中,盐通常是一个随机的预处理值,与原始密钥结合,生成一个新的、唯一的工作密钥。这样即使相同的明文和密钥被多次使用,...

    MD5加密实例(加盐)

    在压缩包中的"MD5的实例(加盐)"文件,很可能是包含了一个具体的编程实现,例如用Python、Java或其他语言实现的MD5加盐过程的代码示例。这些示例通常会展示如何生成盐、如何拼接原始数据和盐、如何进行MD5哈希以及...

    SpringBoot小说项目

    ①密码加密:MD5 加盐算法实现密码的加密,基于原本的 MD5 加密算法进行加盐操作实现密码的加密。 ②拦截器:通过 SpringAOP 实现拦截器,对用户登录权限、异常通知等操作进行的统一处理,对返回响应数据进行统一...

    java生成md5密码加盐

    为了增强安全性,我们引入了“加盐”(Salting)的概念。本文将详细介绍Java和SpringBoot如何实现加盐的MD5密码生成。 首先,MD5是一种单向哈希函数,它将任意大小的数据转换为128位的哈希值,通常以32位的十六进制...

    MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐

    MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐

    基于加盐BCrypt算法的电商安全模块设计及实现.zip

    本文将深入探讨如何设计并实现一个基于加盐BCrypt算法的电商安全模块,以增强账户信息的安全性,防止未授权访问和数据泄露。 BCrypt是一种广泛使用的密码哈希函数,特别适合存储用户密码。它结合了Blowfish加密算法...

    VB加密解密算法

    3. 加盐(Salt)和初始化向量(IV):在哈希或对称加密中使用随机数据增加安全性。 4. 安全实践:遵循最佳实践,定期更新加密算法,防止因新出现的攻击方式导致数据泄露。 总之,VB加密解密算法在保护软件、数据...

    java密码加密解密算法代码实现

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。...在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。...

    java多种加密解密算法:SHA算法,HMAC算法,DES算法,PBE算法,AES算法,RSA算法,数字签名,D-H算法

    本文将深入探讨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算法的在线加解密系统详解》 在信息技术领域,数据安全是至关重要的。本文将深入探讨一个基于SM3和SM4算法的在线加解密系统,该系统旨在为任何类型的文件提供高效且安全的加密与解密服务。首先,我们...

    交通信息查询

    在实际应用中,为了保障用户安全,应采用加密技术存储密码,例如哈希加盐算法,避免明文密码泄露。同时,系统应有权限管理,确保不同角色的用户只能访问和操作他们应有的信息。 最后,前端界面设计和后端服务的交互...

    salt_hash.zip_Node.js_密码加密与解密_密码加盐

    本案例主要关注的是如何利用Node.js的crypto模块来进行密码加密与解密,并且涉及到了密码加盐(salt)的策略。以下是对这两个关键知识点的详细说明。 首先,我们来看密码加密。在Node.js中,crypto模块是内建的,...

    常用加密算法演示

    在这个“常用加密算法演示”中,我们主要探讨了三种常见的加密算法:SHA256加盐加密、AES ECB加密以及AES CBC加密。下面将详细介绍这些加密算法及其特点。 首先,SHA256是一种广泛使用的哈希函数,用于生成固定长度...

    聊天小程序

    同时,敏感信息如用户密码需要进行加密存储,通常会使用哈希加盐算法。另外,为了保护用户隐私,聊天内容可能需要进行端到端加密,例如使用SSL/TLS协议。 在学习这个聊天小程序的源码时,我们可以深入理解小程序的...

Global site tag (gtag.js) - Google Analytics