文档章节

web登录应用加密狗

风象南
 风象南
发布于 2017/08/31 15:06
字数 578
阅读 405
收藏 0

加密锁中有:
唯一硬件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;
   }

本文转载自:http://bbs.csdn.net/topics/360077262

下一篇: 什么是AOP?
风象南
粉丝 99
博文 272
码字总数 47641
作品 1
西安
技术主管
私信 提问
B/S结构当中,加密狗登录验证算安全么?

目前在开发招财猪进销存,打算用加密狗来做验证,可以简单归纳为一组固定24位ID和两组随机28位字符在加密狗和服务端验证,成功以后才能正常登录,而且登录成功以后,每一步操作都要监测加密狗...

铂金小猪
2014/03/28
811
5
用友U8登录控件的使用

登录控件包含860以前的老登录控件(VB组件)和为860版本以及以后的版本新开发的新登录控件(C#组件),为了兼容老产品,新、老登录控件同时并存,但是老的登录控件只保留登录接口,和属性、以...

hdf007
2016/12/16
0
0
加密狗的一些介绍

加密狗是目前流行的一种软件加密工具。它是插在计算机接口上的软硬件结合的软件加密产品。一般有USB口和并口两种,又称USB加密狗和并口加密狗,目前流行的一般是USB加密狗,并口加密狗在前几...

东风125
2015/12/02
59
0
[转]加密狗原理介绍

  来源:http://blog.csdn.net/kerneltang/archive/2004/02/25/22156.aspx   本人就现今全球软件保护行业较普遍采用的方法之一使用“硬件加密狗”的方式方法谈谈自己的一点看法。   在...

夏春涛
2007/06/02
0
0
Dropbox 允许用户使用 U2F 安全密钥登录

Dropbox 今天宣布将会支持安全密钥。 安全密钥指的是物理的 USB 加密狗,从类似 YubiCo 的公司绕过传统应用和文本基于信息的双因素认证方案,通过简单的插入密钥到你的电脑实现。 这些密钥的...

oschina
2015/08/13
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

基础工具类

package com.atguigu.util;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid......

architect刘源源
今天
43
0
P30 Pro劲敌!DxO官宣新机:排行榜又要变

5月26日晚间,DxOMark官方推特预告,将在5月27日公布一款新机型的DxOMark评分,猜猜是哪款? 网友猜想的机型有:红米K20、谷歌Pixel 3a、索尼Xperia 1、诺基亚9 PureView等。 DxOMark即将公布...

linux-tao
昨天
15
0
Ubuntu18.04.2窗口过小不能自适应(二次转载)

解决Ubuntu在虚拟机窗口不能自适应 2018年09月06日 16:20:08 起不了名儿 阅读数 855 此博文转载:https://blog.csdn.net/nuddlle/article/details/77994080(原地址) 试了很多办法这个好用 ...

tahiti_aa
昨天
2
0
死磕 java同步系列之CountDownLatch源码解析

问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以...

彤哥读源码
昨天
6
0
Nginx提供下载apk服务

有时候我们可能需要提供文件或者其他apk下载链接,通过 nginx 配置可以很简单地实现。 server {    listen 80;    server_name download.xxx.com;    root app;    locati...

Jack088
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部