B/S系统USB-KEY(加密锁)认证实现
来源:互联网 发布:sql创建数据库代码 编辑:程序博客网 时间:2024/06/06 20:58
最近由于项目需要,系统需要对用户进行身份认证,经过一番的调研,最后决定选用客户端加密锁认证方式实现,使用的是磐石科技的NT120身份认证锁(客户端需要安装插件)。
加密锁中有:
唯一硬件ID:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
MD5:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
数据库中用户表中增加两个字段:
唯一硬件ID:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
MD5:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
硬件ID是唯一的,因此一个用户对应一个加密锁。
实现原理:
首先是加密锁登陆密码认证(加密锁是有密码的),加密锁登陆密码认证成功,读取加密锁中的唯一硬件ID,通过产生的随机数调用加密锁接口得到客户端信息摘要(随机数和MD5进行MD5运算),将硬件ID、客户端摘要、随机数一同发送至服务器端, 服务器端根据硬件ID到数据库中找到对应的MD5,同时服务器端用传递过来的随机数和MD5进行MD5运算,得到服务器端信息摘要,用客户端传递过来的信息摘要和服务器端的信息摘要比较,相同则认证成功!
客户端代码:
<script language="javascript" type="text/javascript"> function dcLogin(){ var form=document.forms("login"); var Digest="0123456789ABCDE"; var rtn; var sNTPWD=form.edtntupin.value; if(sNTPWD==""){ alert("登录密码不能为空!"); return false; } //查找NT锁 rtn=NT120Client.NTFind(); if(rtn!=0){ alert("没有找到加密锁!"); return false; } //打开NT锁 rtn=NT120Client.NTLogin(sNTPWD) if(rtn!=0){ alert("登录密码出错!");//65代表错误重试次数超过3次 return false; } //获取NTHardwareID var NTHardwareID = "0123456789ABCD"; NTHardwareID = NT120Client.NTGetHardwareID(); if(NTHardwareID==""){ alert("获取硬件序列号失败!"); return false; } //进行硬件MD5运算 try{ Digest=NT120Client.NTMD5("<%=(String)session.getAttribute("RandomData")%>"); }catch(ex){ alert("MD5错误"); return false; } form.digest.value=Digest; form.hardwareID.value=NTHardwareID; form.submit(); }</script>
服务器端代码:
/** * 用户认证 */public String dcLogin(){ HttpServletRequest request = ServletActionContext.getRequest (); String RandomStr = (String)request.getSession().getAttribute("RandomData");//获取随机随机数 String cDigest = request.getParameter("digest");//客户端MD5密钥 String sDigest = "";//服务器MD5密钥 String ntID = request.getParameter("hardwareID");//获取硬件ID try{ //根据ntID得到用户信息(包括MD5值) UserModel user = userService.getNTIDByMd5(ntID); if(user != null){ //进行MD5运算 String msg = (RandomStr+user.getUserKey()); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(msg.getBytes("UTF-8")); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for(int offset = 0; offset < b.length; offset++) { i = b[offset]; if(i<0) i+= 256; if(i<16) buf.append("0"); buf.append(Integer.toHexString(i)); } sDigest = buf.toString(); //进行MD5密钥比较,给出相应的服务 if (sDigest.equals(cDigest)){ StaticConstant.USER_TYPE = 1; log.info("DataCenter User OK!"); request.getSession().setAttribute("user",user); }else{ message = "用户认证失败,请联系研发人员!"; return INPUT; } }else{ message = "用户认证失败,没有对应的用户信息!"; return INPUT; } }catch(Exception ex){ ex.printStackTrace(); } return SUCCESS; }
- B/S系统USB-KEY(加密锁)认证实现
- 使用USB Key(加密狗)实现身份认证
- USB KEY 身份认证简介
- USB KEY 身份认证简介
- USB key身份认证介绍
- 加密狗和USB-key
- 身份认证狗,在B/S结构系统中的使用
- USB KEY身份认证管理系统及网站访问控制方案(一)
- USB KEY身份认证管理系统及网站访问控制方案(二)
- USB KEY身份认证管理系统及网站访问控制方案(三)
- usb key,互联网网站Web登录,应用系统认证安全保障
- 银行应用USB Key身份认证方案
- HTTPS双向认证+USB硬件加密锁(加密狗)配置
- 关于常规B/S、C/S系统开发实现原理
- 身份认证狗,在B/S结构的《威博文件管理系统》中的使用
- C#(C/s,B/s)md5加密
- C#(C/s,B/s)md5加密
- USB Key身份认证产品的产生与发展
- 用JAVA判断一个URL是否有效
- java序列化Serializable
- IOS 匆忙第一篇 — 第三方登陆
- 等待调用的新进程执行完毕再继续执行本进程的方法
- 在ubuntu上软件安装的几种格式dev,rpm,bin,tar.gz
- B/S系统USB-KEY(加密锁)认证实现
- Troubleshooting Kdump error "Memory for crashkernel is not reserved"
- 诊断Java中的内存泄露
- OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例
- Arduino - 315/433MHz RF无线收发模块
- S2SH整合所需jar包及其详解
- cuda的Pinned Memory(分页锁定内存)
- 一些常用jar包作用
- 网络营销包含哪些方面的知识听太原郭文军细讲