运行环境
- win服务器 系统server2008R2
- C# ASP.NET服务器页面
前端部分
1.引用
//JS部分引用 <script type="text/javascript" src="Js/JQuery.js"></script> //基于JQuery <script type="text/javascript" src="Js/PassGuard/crypto-js.js"></script> <script type="text/javascript" src="Js/PassGuard/PassGuardCtrl.js" charset="utf-8"></script> <script type="text/javascript" src="Js/PassGuard/thickbox.js"></script>
2.隐藏域
//隐藏域存储三部分 密码key, 随机因子, 网卡等设备信息 <asp:HiddenField runat="server" ID="hidSKey" /> <asp:HiddenField runat="server" ID="hidEnStr" /> <asp:HiddenField runat="server" ID="hidMachineNetwork" />
3.初始化
//初始化密码控件 由JS初始化 <script type="text/javascript"> var pgeditor = new $.pge({ pgePath: "https://static.xxxx.com/Download/PassGuard/",//控件文件目录 pgeId: "OcxPassword",//控件ID pgeEdittype: 0,//控件类型,0星号,1明文 pgeEreg1: "[\s\S]*",//输入过程中字符类型限制 pgeEreg2: "[\s\S]{0,30}", //输入完毕后字符类型判断条件 pgeMaxlength: 30,//允许最大输入长度 pgeTabindex: 0,//tab键顺序 pgeClass: "ocx_style",//控件css样式 pgeInstallClass: "ocx_style",//针对安装或升级 pgeOnkeydown: "checkInput()",//回车键响应函数 tabCallback: "input2",//非IE tab键焦点切换的ID //windows10相关 pgeWindowID: "password" + new Date().getTime() + 1, pgeRZRandNum: "<%=hidSKey.Value%>", pgeRZDataB: "<%=hidEnStr.Value%>" }); window.pgeCtrl = pgeditor; window.onload = function () { pgeditor.pgInitialize();//初始化控件 } </script>
4.点击事件
var length = pgeditor.pwdLength();//获得密码长度 if (length == 0 || length == undefined) { alert("密码不能为空"); $("#OcxPassword").focus(); return false; } if (pgeditor.pwdValid() == 1) {//判断密码是否匹配正则表达式二 alert("密码不符合要求"); $("#OcxPassword").focus(); return false; } $.ajax({ url: "SrandNum.aspx", type: "GET", async: false, cache: false, success: function (srand_num) { pgeditor.pwdSetSk(srand_num);//给控件设置随机因子 } }); var pwdResult = pgeditor.pwdResult();//获取密码AES密文 var machineNetwork = pgeditor.machineNetwork();//获取网卡信息密文 var machineDisk = pgeditor.machineDisk();//获取硬盘信息密文 var machineCPU = pgeditor.machineCPU();//获取CPU信息密文 $("#<%=txtLoginPwd.ClientID %>").val(pwdResult);//将密码密文赋值给表单 $("#<%=hidMachineNetwork.ClientID %>").val(machineNetwork);//将网卡和MAC信息密文赋值给表单
5.标签
<table> <tr> <td> <script type="text/javascript"> pgeditor.generate(); </script> </td> <td> <div> <span class="Item02"></span> </div> </td> </tr> </table>
后端部分
首先需要引入文件: Interop.CPassguardLib.dll
注: Interop 引入面向托管代码,类似与静态类 不用在实际编程中引入命名空间,网站直接引用其dll可以直接使用
//首先在页面加载中 Page_Load 的时候加载 密码控件 赋值 哈希函数,赋值 随机因子 CPassguardLib.CPassguard Pgtest = new CPassguardLib.CPassguard(); hidSKey.Value = Pgtest.Get_RandHex(); hidEnStr.Value = Pgtest.Get_AesEncrypt(hidSKey.Value, hidSKey.Value); //获取用户输入密码时获取随机因子等信息 由dll解析 获得原始密码 string loginPwd = ""; string mac = ""; string mcryptKey = ""; try { mcryptKey = StringUtils.NotNullStr(Session["mcryptKey"]); //随机因子 Session.Remove("mcryptKey"); CPassguardLib.CPassguard Pgtest = new CPassguardLib.CPassguard(); loginPwd = Pgtest.Get_AesDecrypt(mcryptKey, password);//调用解密接口.获得密码明文。 mac = Pgtest.Get_AesDecrypt(mcryptKey, machineNetwork);//调用解密接口.获得密码明文。 } catch (Exception ex) { log.Warn("warm:" + ex.Message + ",password【" + password + "】,machineNetwork【" + machineNetwork + "】,mcryptKey【" + mcryptKey + "】"); this.ShowClientAlert("登录异常"); return; }
特别注意:密码控件前端部分通过随机因子等参数参数传递参数加密,不仅如此前端提交时默认该方法为最终提交方式,也就是如果调用了密码控件的JS操作方法后再去执行其他函数提交可能会失败!~,但不一定是全部控件都会如此,谨以此例供大家参考.