码迷,mamicode.com
首页 > 其他好文 > 详细

每分钟变换一个密码的加密验证功能

时间:2015-10-23 12:05:09      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

    越南项目需要引入用户管理的模块,需要有注册登录的功能,因为有来自政府部门的订单,所以对安全方面的要求比较高。

我在注册登录的功能中引入变换密码的加密概念。

用户注册加密过程:服务器拿到原始密码,使用SHA_1算法加密,再使用MD5加密,然后存入数据库。

用户登录加密验证过程:客户端拿到用户输入的密码,使用SHA_1算法加密,再使用MD5加密,将得到的密文加上时间戳,然后再按照之前方式加密一次,提交给服务器。服务器接收到密文之后,在数据库中查询出用户注册时的密文,给密文加上时间戳,再使用SHA_1和MD5算法加密。

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SHA_1 {

	private static String Encrypt(String strSrc, String way) {
		MessageDigest md = null;
		String strDes = null;

		byte[] bt = strSrc.getBytes();
		try {

			md = MessageDigest.getInstance(way);
			md.update(bt);
			strDes = bytes2Hex(md.digest());
		} catch (NoSuchAlgorithmException e) {
			System.out.println("Invalid algorithm.");
			return null;
		}
		return strDes;
	}

	private static String bytes2Hex(byte[] bts) {
		String des = "";
		String tmp = null;
		for (int i = 0; i < bts.length; i++) {
			tmp = (Integer.toHexString(bts[i] & 0xFF));
			if (tmp.length() == 1) {
				des += "0";
			}
			des += tmp;
		}
		return des;
	}

	public static String loginEncryption(String data) {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHH");
		String date = df.format(new Date());
		
		data = date+data;

		return Encrypt(Encrypt(data, "SHA-1"), "MD5");
	}
	
	public static String registerEncryption(String data){
		
		return Encrypt(Encrypt(data, "SHA-1"), "MD5");
	}

}

时间戳的有效时间可以控制,比如一分钟、一个小时、一天...... 通过这种方式提高用户账号的安全性。其中值得注意的是,时间戳的有效期不能太短,比如1秒,因为网络有延迟,如果设置是一分钟、一个小时,后台还要多生成一个前一分钟或前一个小时的密码,同时验证,当有一个验证成功,表示密码正确。


每分钟变换一个密码的加密验证功能

标签:

原文地址:http://my.oschina.net/hehongbo/blog/521083

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!