USBKey技术在J2EE项目中的应用

2018-06-07  本文已影响23人  张振伟

安全 USBKey

引导

USBKey技术和数字证书技术一样,也是数字签名的一种应用。我们知道,数字签名是非对称密钥加密技术与数字摘要技术的应用。所以归根结底使用USBKey还是用到非对称加密。

什么是USBKey

USBKey主要包含两块:加密芯片和带有安全存储的空间。

USBKey初始化过程

USBKey应用步骤

  1. 产生一个随机字符串(这个字符串可以是服务器端传给页面,也可以是页面通过JS自己生成)
  2. 调用USBKey的签名方法对上面的随机字符串签名得到签名串(这一步一般需要安装USBKey厂商的ActiveX控件)
  3. 将随机字符串、签名串、用户名、密码等提交表单到后台
  4. 后台根据用户名密码判断用户,并得到用户的公钥(公钥是跟用户关联的,当然最简单的就是作为用户表的一个字段)。根据提交的随机字符串、签名串、公钥验签。
<!-- USBKey ActiveX 空间 不同厂商不一样 -->
<OBJECT id="OCX" style="display:none" classid="clsid:B33CED4C-53E0-4F76-B80C-CEAA6DE23551" VIEWASTEXT></OBJECT>
// 生成随机数并获得签名  
var randomNo = Math.round(Math.random() * 10000);  
$('#__randomNo').val(randomNo);  
$('#__key').val(ocx.SignMsg(randomNo));  
// 验证签名
boolean b = KeyHelper.isValidKey(user.getPublickey(), sigenedUsbkey, randomNo);
if (!b) {
    setResult(false, "验证用户USBKEY不通过!", request);
    return mapping.findForward(LOGIN);
}
// 验证签名         
public static boolean isValidKey(String userPubKey, String key, String randomNo) throws Exception {
    JSignVerify signverify = new JSignVerify();
    signverify.ReadRawPublicKeyFromBigInt(userPubKey);
    return signverify.VerifyMemorySHA1(randomNo.getBytes(), Base16.hexStrToBytes(key));
}
上一篇下一篇

猜你喜欢

热点阅读