附加(目前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,可自行下载
基于加盐BCrypt算法的电商安全模块设计及实现.pdf
AES 128位加解密C++源码(加盐)
网络安全问题日益严峻的今天,原始密码和简单非可逆加密算法已经不足以提供安全的系统服务,所以加盐加密技术使用越来越普遍。 本文档系统的介绍了加盐加密的原理和实现方案。 由四哥许坤整理发布,...
基于加盐BCrypt算法的电商安全模块设计及实现
MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。...在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。...
一个多功能加密解密工具,支持QQtools、MD5、DES、AES、SHA256、Base64 等多种加密解密方式,并支持随机盐,附有源码,可直接编译使用。
本文运用springmvc+spring+mybatis框架技术,通过模型分析、数据库表设计、时序图逻辑跳转的方式,详细地阐述了加盐BCrypt算法在电商安全模块中的应用,有效地解决了MD5加密算法的弊端,极大地提高了信息的安全性.
演示常用加密算法 SHA256加盐加密 AES ECB 加密 AES CBC 加密 AES 密钥 初始化向量不够128位,自动填充0,补足128位。 对齐与C库不同的实现。
将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 算法/密钥长度/默认密钥长度: 1.PBEWithMD5AndDES/56/56 2.PBEWithMD5AndTripleDES/112,168/168 ...
javascript 实现 md5 加密。
用于js加密,web页面值加密,是一种不可逆的加密算法
在常用的hashlib模块里还有sha1()等方法,它的本质和md5是一致的,只是产生的结果是160 bit字节,通常用一个40位的16进制字符串表示。而md5是最常见的加密算法,生成速度...给密码加盐是什么:见上面提到的,下面内
用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA512...hhb = hashlib.md5(bytes(jahiuhfdakj, encoding='utf-8')) #加盐处理 ret = hhb.update(bytes(123, encoding='utf-8')) #“123”是
本代码基于离散小波变换(DWT)的数字图像水印嵌入提取算法,采用haar小波作为基函数,利用mallat快速小波分解重构算法。基于Arnold变换的图像置乱技术对图像进行加密,提高水印的安全性和鲁棒性。利用五种攻击测试...
明文存储:肉眼就可以识别,没有任何安全性。... 加盐哈希加密:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运用这种加密方法。
平常摘取的Java开发平时常用的加密算法:不可逆加密, MD5SHA系列,HMAC系列,对称加密算法,DES,3DES,AES非对称加密算法,加密盐,等多种加密算命备有案例。
PHP编写的一个用于文件加密的算法,可以加密任何文件,输出是二进制内容文件。其中加密时可配置盐等。此算法可以用于文件管理系统等方面文件加密。