`

加盐算法

    博客分类:
  • 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加密解密算法在保护软件、数据...

    基于SM3算法和SM4算法的在线加解密系统(针对任何文件的加解密)

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

    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是一种散列函数,它能将任意长度的输入...

    基于MD5的加盐消息摘要Java实现.pdf

    本文主要讨论了基于MD5算法的加盐消息摘要Java实现。该方法通过增加原始明文的长度来解决短明文摘要加密不安全的问题,从而提高加密安全性。文章还讨论了Java语言的特点,如继承、封装、多态等,可以使程序更加稳定...

    交通信息查询

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

    加密解密工具支持随机盐(带源码)

    一个多功能加密解密工具,支持QQtools、MD5、DES、AES、SHA256、Base64 等多种加密解密方式,并支持随机盐,附有源码,可直接编译使用。

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

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

    常用加密算法演示

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

Global site tag (gtag.js) - Google Analytics