人事管理系统登录界面--WPF

登录界面要求如下:

1、如何保证密码的安全性。

2、如何进行密码验证。

3、如何当密码输错三次,用户自动锁定。

4、如何提示用户。


问题解决方案:

1、采用MD5加密,再进行加盐处理。

2、输入的密码加密,与数据库中的密码相匹配。

3、设置全局变量进行计算密码输入错误次数。

4、密码错误与用户名不存在时,在界面上显示错误信息,而不是弹出窗口。


登录前台代码XAML:

    
    
        
            
                
        
        
        
        
        
        
        

登录后台代码:

  	private int num = 0;	//密码输入错误次数

        private void btnLogin_Click(object sender, RoutedEventArgs e)
        {

            #region 检查文本框

            if (txtUserName.Text.Trim().Length <= 0 || pwdPassword.Password.Trim().Length <= 0)  //为了解决用户名和密码都不填写的时候,不能同时显示两个提示
            {
                if (txtUserName.Text.Length <= 0)
                {
                    //显示Label
                    labUserName.Visibility = Visibility.Visible;
                    //添加背景颜色
                    labUserName.Foreground = Brushes.Red;
                    //验证信息
                    labUserName.Content = "账号不能为空";
                 
                }
                else
                {
                    //内容不为空,就隐藏
                    labUserName.Visibility = Visibility.Hidden;
                }
                if (pwdPassword.Password.Length <= 0)
                {
                    labPassword.Visibility = Visibility.Visible;

                    labPassword.Foreground = Brushes.Red;
                    labPassword.Content = "密码不能为空";
                 
                }
                else
                {
                    labPassword.Visibility = Visibility.Hidden;
                }
                return;
            }

            labUserName.Visibility = Visibility.Hidden;
            labPassword.Visibility = Visibility.Hidden;
           
            #endregion

            //获取窗体用户名和密码
            string userName = txtUserName.Text;
            string password = pwdPassword.Password;



            //密码加密,并在进行加盐
            password = CommonHelper.GetMD5(password + CommonHelper.GetPaawordSalt());
            OperatorBLL bll = new OperatorBLL();           
            Operator op = new Operator();
            string msg; //返回信息

            bool state = bll.Login(userName, password, out msg, out op);

            if (op.IsLocked == true)    //是否锁定
            {
                MessageBox.Show("用户已锁定,请联系管理员");
                return;
            }

            if (state)
            {
                //登录成功,可进入主界面

                #region 操作日志 登录成功

                new OperationLogBLL().Insert(op.Id, "登录系统");

                //相当于Session
                Application.Current.Properties["OperatorId"] = op.Id;

                #endregion               

                DialogResult = true;
                
            }
            else
            {
                #region 操作日志 登录失败
                new OperationLogBLL().Insert(op.Id, "尝试登录,登录失败");
                #endregion

                num++;

                if (num >= 3)
                {
                    
                    bll.LockById(op.Id);
                    MessageBox.Show("管理员" + op.UserName + "已输错三次密码,请联系开发人员");
                }
                else
                {
                    
                    MessageBox.Show(msg+"还有"+(3-num)+"次机会");
                }

            }

        }

        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            DialogResult = false;
        }

密码加密代码(CommonHelper)类:

	/// 
        /// MD5加密算法
        /// 
        /// 用户输入的密码
        /// 已加密的密码值
        public static string GetMD5(string sDataIn)
        {
            //把字符串转换成字节数组
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] bytValue, bytHash;
            bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn);
            //加密
            bytHash = md5.ComputeHash(bytValue);
            md5.Clear();
            string sTemp = "";
            //把每一个字节0-255.转换成两位16进制的数
            for (int i = 0; i < bytHash.Length; i++)
            {
                sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
                //X2,生成两个16进制,2为了成为2位(补0)
                //'X'是代表16进制.当1的时候,不是两位,就是要补0
            }
            return sTemp.ToLower();
        }

        /// 
        /// 密码加盐,防止用户密码过于简单
        /// 
        /// 
        public static string GetPaawordSalt()
        {
            //可以在配置文件AppSettings,添加key来增加值.
            string salt = ConfigurationManager.AppSettings["passwordSalt"];
            return salt;
        }

密码加盐 存放于根文件下App.Config文件中,方便用户修改:

App.Config



     
        
    
  
    
  
  
  
    
  



你可能感兴趣的:(WPF)