最近由于项目需要,系统需要对用户进行身份认证,经过一番的调研,最后决定选用客户端加密锁认证方式实现,使用的是磐石科技的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;
}
分享到:
相关推荐
USB-KEY是防火墙管理中的重要组件,负责加密锁和身份验证。下面是 USB-KEY 的配置使用方法: 步骤1:插入USB-KEY 在终端系统中插入随机标配的 USB-KEY,连接到 USB 接口。 步骤2:打开防火墙管理认证客户端程序 ...
对于捷德USB-KEY来说,这个驱动程序允许Vista系统识别并正确管理USB-KEY,实现数据加密、解密以及安全认证等功能。 在下载并安装"捷德USB-KEY Vista版驱动程序.rar"这个压缩包后,用户应遵循以下步骤来完成驱动程序...
SANGFOR_aDesk_v4.8瘦客户机USB-KEY认证配置测试指导 本文档主要介绍了SANGFOR_a...本文档提供了详细的配置指导和实现原理,帮助用户正确地配置SANGFOR_aDesk_v4.8瘦客户机USB-KEY认证,确保系统的安全性和可靠性。
MD5 B/S C/S 调用接口 共享key 加密sign传输调用接口 加密参数,服务端同样的方式加密,本地与服务端的sign相等,则表示正常传输,否则报错
USBKey是一种安全数字证书介质,常用于身份认证与数据加密保护。它通过内置的安全芯片存储用户的私钥及数字证书等敏感信息,并在用户进行网络交易或访问受保护资源时提供密钥对数据进行加解密处理,从而确保数据传输...
4. **安全处理**:USB Key通常带有加密功能,需要遵循特定的加密协议,如PKCS#11,与USB Key内的硬件安全模块(HSM)进行交互。这可能需要引入特定的API库,如OpenSC或SunMSCAPI。 5. **错误处理**:在USB Key开发中...
总之,捷德USB-KEY win7 32&64 驱动是确保捷德品牌的USB-KEY在Windows 7系统上正常运行的关键,它提供了必要的通信桥梁,使得硬件设备能够被操作系统识别并发挥其应有的加密保护功能。对于依赖此类硬件加密设备的...
4G5G模块MSATA盘(M.2_B-KEY+M.2_E-KEY 封装) AD集成封装库,已经其他一些USB3.0 ,RJ45 ,SD卡等,详细封装型号如下: Component Count : 69 Component Name ----------------------------------------------- ...
S/Key身份认证协议是一种基于一次性口令(One-Time Password, OTP)的强身份验证方法,主要用于增强网络安全性。在C#中实现S/Key协议,可以为应用程序提供更高级别的用户验证保护,防止恶意攻击者通过重放攻击或者密码...
基于 PKI 的数字证书的认证模式中,USB KEY 内置密钥对,私钥用于签名,公钥用于加密。用户在登录时,使用私钥对服务器的挑战(challenge)进行签名,服务器验证签名结果,以确认用户的身份。 USB KEY 的认证原理是...
23. <prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop> 24. <prop key="hibernate.hbm2ddl.auto">update</prop> 25. </props> 26. </property> 27. <property name="packagesToScan"> 28....
npm i @transmute/did-key.js@latest @transmute/did-key-ed25519@latest @transmute/did-key-x25519@latest @transmute/did-key-bls12381@latest @transmute/did-key-secp256k1@latest @transmute/did-key-p384@...
忆捷 EA-Key3 加密软件,最强的32为加密技术
### USBKey身份认证系统的设计与实现 #### 摘要 本文主要介绍了一种基于USBKey的身份认证系统的设计与实现过程。此系统充分利用了计算机的标准USB接口,旨在提供一种低成本、高可靠、简便易用的身份认证解决方案。...
E-S_key认证系统保留了S_key认证系统的所有优点,同时改进了S_key认证系统的缺陷。E-S_key认证系统在用户ID、种子和序列号的基础上增加了一个随机数,这个随机数在每个认证过程中生成,使得每次生成的一次性密码都是...
本实用新型揭露的一种网上银行利用USBKey加密、认证的装置,包括:一个USBKey,具有唯一的序列号,用于存放识别客户身份的数字证书和私人密钥的数字证书,所述USBKey的序列号与客户信息相对应;一个联网计算机,具有...
S/KEY协议是一种基于一次性密码(One-Time Password, OTP)的认证协议,它主要用于网络身份验证,以增强安全性。此协议的核心思想是每次登录时使用一个新的、唯一的密码,这些密码是通过一个初始密钥(也称为种子)...
基于USB-Key认证的电子保密柜系统是在微处理器技术和身份认证技术高速发展的环境下,为满足重要物品的管理要求,设计开发的具有多组身份认证、远程认证和远程授权开柜的电子保密柜系统。该系统基于PKI体系,实现了...
本文主要介绍了USB KEY文件加密工具的总体设计和详细设计思路以及应用和编码。在总体设计中主要介绍了设计该工具的需求分析、系统的选型、以及Rockey2加密锁的介绍。在详细设计中主要介绍了系统功能的分析、Rockey2...