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

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

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

用户注册加密过程:服务器拿到原始密码,使用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秒,因为网络有延迟,如果设置是一分钟、一个小时,后台还要多生成一个前一分钟或前一个小时的密码,同时验证,当有一个验证成功,表示密码正确。

时间: 2024-10-05 14:16:01

每分钟变换一个密码的加密验证功能的相关文章

实现一个带有指纹加密功能的笔记本(Android)第一部分

自己经常会忘记一些密码什么的,想把这些密码保存下来,但是别人做的软件总有一点不安全的感觉,所以自己动手做了一个带有指纹加密的笔记本. 以下是本工程用到的一些第三方包 compile 'org.greenrobot:greendao:3.2.0' compile 'net.zetetic:android-database-sqlcipher:3.5.1' compile 'com.getbase:floatingactionbutton:1.10.1' 其中greendao是一款比较好用的开源数据

将 Shiro 作为应用的权限基础 五:密码的加密/解密在Spring中的应用

考虑系统密码的安全,目前大多数系统都不会把密码以明文的形式存放到数据库中. 一把会采取以下几种方式对密码进行处理 密码的存储 "编码"存储 Shiro 提供了 base64和 16 进制字符串编码/解码的 API支持,方便一些编码解码操作. Shiro内部的一些数据的存储/表示都使用了 base64和 16 进制字符串. 下面两端代码分别对其进行演示 Stringstr = "hello"; Stringbase64Encoded = Base64.encodeTo

(转)业务系统实现记住密码和自动登录功能

公司的业务系统本来是受域控的,用户不需要登录可以直接访问系统.当然,虽然不用人工登录,系统本身会读取电脑的用户名为登录标识,对系统操作权限和记录也是以电脑名.近段时间,由于系统要牵到云端,也就是不受域控了,那就需要每人手头上都有账号和密码了,这个和一般的业务系统没什么区别.但是由于用户之前的习惯是不用登录的,而且每天打开关闭的次数较多.OK,一般的系统登录都会有个记住密码的功能,但是,这还满足不了用户的需求,那么我们给用户增加多一个自动登录功能,类似QQ那样,我上次访问勾选了自动登录功能,然后再

使用node+express+mongodb实现用户注册、登录和验证功能

无论是手机端还是pc端,几乎都包含登录注册方面功能,今天就使用node+express+mongodb实现一套登录注册功能,这里需要自己去安装MongoDB环境,如果没有安装可以看这篇关于MongoDB安装的步https://www.cnblogs.com/zhoulifeng/p/9429597.html 实现功能 注册 密码加密 登录 校验 token处理 1.环境搭建运行 在目录里安装express和mongoose,并在根目录创建server.js文件和models文件, 在server

EXTJS 密码确认与验证

extjs 框架是一个非常优秀的前端框架,提供了丰富的功能与炫丽的界面展示,在用 extjs 创建表单时,特别是在注册或修改密码的时候,要对密码进行确认,这里就密码确认一致性验证和大家分享自己的心得与体会. 方法一:主要代码如下 1 <script type='text/javascritp> 2 // 自定义样式 3 var required = '<span style="color:red;font-weight:bold" data-qtip="Re

jQuery Validate 插件,表单验证功能

连接地址:http://www.w3cschool.cc/jquery/jquery-plugin-validate.html jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 Jör

c#程序中对密码进行加密的方法

在ADO.NET中,向数据库添加数据时,怎样对数据中的密码进行加密?(也就是说在数据表中也看不到用户的密 码,只是一些经过编译后的字符串,以防止数据库管理员利用用户的密码进行非法操作.)    首先,在c#WinForm程序中引入命名空间,"using System.Web.Security;",此命名空间是专门用来对程序进 行安全设置的:    其次,定义一个string类型的变量,用来接收用输入的密码:  string passWord = this.textBox1.Text.T

thinkPHP 表单自动验证功能

昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对应的数据库表的模型类下建立$_validate属性就可以了. 1.我们找到Model基类,可以看到 protected $_validate       = array();  // 自动验证定,它是数组类型的,下面在对应数据模型文件定义它: 2. public function CheckVeri

jQuery Validate【为表单提供了强大的验证功能,让客户端表单验证变得更简单】

jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 J?rn Zaefferer 编写和维护的,他是 jQuery 团队的一名成员,是 jQuery UI 团队的主要开发人员,是 QUn