使用USB Key(加密狗)实现身份认证
首先你需要去买一个加密狗设备,加密狗是外形酷似U盘的一种硬件设备! 这里我使用的坚石诚信公司的ET99产品
公司项目需要实现一个功能,就是客户使用加密狗登录, 客户不想输入任何密码之类的东西,只需要插上类似U盘的加密狗就验证身份登录! (当然如果U盘掉了,也就不安全了哦), 当时这个分配给我的时候,就给了我个ET99设备(类似于U盘那东西),和官方网站! 去官方下载资料(API & DEMO & DOC ),当时我自己心里也没有底,只有先试试吧! 正好今天“试”出来了,和大家分享一下!
ET99的安全性:
- 登录用户必须先输入自己的USER PIN进行验证后才有权限完成计算。
- USER PIN有最大重试次数限制,连续输入错误会锁死。从而防止硬件丢失后,被不合法的用户反复重试。
- 存储在ET99多功能锁中的密钥不能被任何人获取。
- 用户登录时必须具备硬件和保护硬件的USER PIN双重因子时才能登录。有硬件,不知道USER PIN或者知道USER PIN,没有硬件,都是没有办法登录的。比传统的用户名和密码方式大大增加的登录用户的安全性。(类似于银行的U盾)
- 保障了系统开发商的利益。使用硬件登录,不存在用户名密码共享的问题
ET99的认证方式
在整个认证过程中,ET99采用冲击响应的认证方式。当需要在网络上验证用户身份时,先由客户端向服务器发出一个验证请求。服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为冲击)。客户端将收到的随机数提供给ET99,由ET99使用该随机数与存储在ET99中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。

如何开始:
1、在运行ET99全功能Active控件和ET99网页安全Active控件之前,请把FT_ET99_API.dll、ET99_MOD.dll和ET99_FULL.dll拷贝到系统目录下(一般位于windows系统中的system32目录下),然后注册全功能Active控件和网页Active控件,命令行命令如下:regsvr32 ET99_MOD.dll和 regsvr32 ET99_FULL.dll.
2. 初始化设备:



到这一步还没有结束呢 , 我操作的时候就以为结束了,部署官方的et99_sample_csharp_bs示例程序 , 怎么也登录不进去! 因为这里还没有写入Key!

而就是写入Key到数据库和ET99设备中这里需要我们来开发! (之前不清楚AspInit干什么,一头雾水)!
1. 实现AspInit页面功能, 把key和用户名写入到ET99和数据库中

2.第一步实现了就可以去登录试试了

3. 前面不是说PIN为16位吗? 怎么这里你才输入4位呢? 这样的话,那个客户愿意记住16位的PIN呢? 就需要自己写个修改PIN页面了! 第一次修改的时候,你还得输入16位PIN码,以后就不用了!

4. 现在总是大功告成了吧,还没呢?不是说要自动登录吗?怎么还要我点击登录呢?这个这个,好像不行吧!其他网站也是只有记住用户名和密码啊?好像还是需要去点击一下登录按钮吧! 老大说: "就先这样吧!"。还好今天早上,突然想到了思路, 用户第一次成功登录后,把PID,PIN写入Cookie里面,当下次登录的时候直接在Cookie里面获取,在使用JS调用登录按钮的click()事件即可! 可是很多人说cookie不安全啊,呵呵,就算别人获取到cookie里面的值又想怎么, ET99设备他总没有! 必须拥有PID+PIN+ET99设备才可以成功登录! 有个小插曲,做自动登录的时候,因为onload事件调用登录按钮的click()事件形成了死循环,一直在onload一直在click()!最后在前台JS声明个count计数变量,后台登录成功之后在把count值修改一下即可! 到此基本结束!
结语:
这一周基本都在做这个!其中也遇到过很多错误! 很感谢http://www.cnblogs.com/novawu/archive/2010/02/05/1664444.html这位大哥写的ET99Tools,个人觉得比官方的还好!特别是异常处理那块!(当然我程序中异常处理也是直接copy他的代码过去 ET99_API.cs), 官方的文档也要仔细的看,当时我就是由于走马观的看了看,程序抛出的异常都不知道什么情况,比如执行有些函数必须的前置条件,结果前置条件都没有执行,当然程序会出错! 另:winform程序是引用ET99_MOD.dll,而asp.net程序则是引用ET99_FULL.dll,之前也是DLL引用错了,一直在错!
源程序+官方资料+ET99Tools(上面链接哪位仁兄写的)下载
使用USB Key(加密狗)实现身份认证的更多相关文章
- 银行应用USB Key身份认证方案
前言:本文为USB Key的厂商SafeNet公司提供的宣传稿件,并不代表本博客作者的观点和看法. 本文的技术解决方案使用的是SafeNet自身的产品,虽然这个产品支持数字签名和PKI体系,可生成并储 ...
- iOS - HTTPS接口加密和身份认证
为什么要使用HTTPS代替HTTP HTTPS和HTTP的区别 https协议需要到CA申请证书,一般免费证书很少,需要交费. http是超文本传输协议,信息是明文传输,https则是具有安全性的SS ...
- USB Key
随着互联网和电子商务的发展,USB Key作为网络用户身份识别和数据保护的“电子钥匙”,正在被越来越多的用户所认识和使用.本文对USB Key的产生和未来的发展趋势作了一个简单的介绍. 目前市场上见到 ...
- asp.net form身份认证不定时认证失败的问题 排查
1.网站出现form认证不定时认证失败.登陆过后 每隔一会儿就需要重新登陆.首先检查的是form身份认证票据设置的时间(正常) 然后检查加密后的身份认证信息写入的cookie的失效时间(正常) 2.这 ...
- 可穿戴KEY带来的身份认证的革命
在用户身份认证方面,PKI体系给出了极好的解决方式.即基于X.509数字证书的用户身份认证.该方法基于非对称公钥算法的难题为用户提供非常安全的认证过程. PKI体系尽管明白要求"私钥必须保密 ...
- Shiro身份认证、盐加密
目的: Shiro认证 盐加密工具类 Shiro认证 1.导入pom依赖 <dependency> <groupId>org.apache.shiro</groupId& ...
- RESTful Api 身份认证安全性设计
REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...
- RESTful Api 身份认证中的安全性设计探讨
REST 是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 ...
- 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞
手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...
随机推荐
- 【[ZJOI2010]网络扩容】
题目 第一问直接板子敲上去 第二问并不明白直接在残量网络上加边的神仙做法 非常显然我们需要让流量加\(k\),那么我们就使得网络里的总流量为\(maxf+k\),\(maxf\)是第一问求出来的最大流 ...
- bpexpdate – 更改映像目录库中备份的截止日期以及介质目录库中介质的截止日期nbu
1.根据bpdbjobs查找backupidbpdbjobs -jobid xxx -all_columns|grep backupid 2.查看数据保留时间[root@backup]# bpimag ...
- Python—面向对象 封装03
接着上面的一篇继续往下: 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) class A: __x = 1 # _A__x = 1 def __init__(self, ...
- jenkins添加环境变量 ,win 10的 环境变量如下,win7 就是不加也可以运行,不报 “python 不是内部命令 ” 的错误。
jenkins 添加win 10的 环境变量如下,win7 就是不加也可以运行,不报 “python 不是内部命令 ” 的错误,暂时不知道怎么回事. jenkins这样添加环境变量 .
- Sass学习日志
一.什么是SASS SASS是一中CSS的开发工具,提供了许多便利的写法,大大节约了设计者们的时间,使得CSS的开发,变得简单和可维护.本文总结了SASS的主要方法.我们的目标是,有了这篇文章,日常的 ...
- PTA 最多删除3个字符(DP) - 30分
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1] 内的字符串. 输 ...
- python多线程举例
Python中使用线程有两种方式:函数或者用类来包装线程对象. 1. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.如下例: import time ...
- scala成长之路(5)问题记录
还是在看scala sdk源码的时候,有很多问题要考自己慢慢摸索,这里做个记录. 一. 隐式转换的作用域? 隐式转换需要三个因素 1. 己方(当前对象) 2. 转换函数 3. 对方(转换的目标类) 这 ...
- hadoop2.5.0 HA高可用配置
hadoop2.5.0 HA配置 1.修改hadoop中的配置文件 进入/usr/local/src/hadoop-2.5.0-cdh5.3.6/etc/hadoop目录,修改hadoop-env.s ...
- STM32Cube 5.0 使用V1.7.0的固件库生成keil5环境下的F1工程时发现问题
生成的stm32f1xx_hal_msp.c文件里面,HAL_MspInit(void)函数居然没有了之前1.6库里面的系统中断优先级的设置: /* MemoryManagement_IRQn int ...