• PassGuard密码控件配置


    运行环境

    • 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操作方法后再去执行其他函数提交可能会失败!~,但不一定是全部控件都会如此,谨以此例供大家参考.

  • 相关阅读:
    idea打开项目,没有项目文件,文件报红
    使用lombok自动生成链式调用
    gson常用的方式
    LOADING Redis is loading the dataset in memory Redis javaAPI实例
    redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write
    Redis安装步骤
    springboot+jpa+mysql+redis+swagger整合步骤
    springboot+jpa+mysql+swagger2.0整合
    Daily Scrum 10.23
    Daily Scrum 10.22
  • 原文地址:https://www.cnblogs.com/workstation-liunianguowang/p/8481690.html
Copyright © 2020-2023  润新知