为了账号安全,请及时绑定邮箱和手机立即绑定

自己写的一个登陆窗体验证过程

标签:
MySQL C#

(直接从我的源码上截取的,有多余的东西请不要纠结)


//判断是否为空
if (txtUser.Text == string.Empty || txtPwd.Text == string.Empty)
            {
                MessageBox.Show("请确认您的账号密码输入!", "帐密不能为空", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtPwd.Text = string.Empty;
            }
            else
            //开始处理过程
            {
                //创建连接对象
                MySqlConnection conn = new MySqlConnection();
                //设置连接串,其中用户名密码用你们的配置直接写即可(但实际上一般应该写在配置文件上的,这里为了做个演示就直接写在这了)
                conn.ConnectionString = "Server=Localhost;Database=CQP;User=*********;Password=**********;";
                //设置登陆成功Flag
                bool isConnectSuccess = true;
                //尝试登陆
                try
                {
                    conn.Open();
                }
                catch (MySqlException ex)
                {
                    isConnectSuccess = false;
                    MessageBox.Show("连接失效!请重新启动应用程序或者联系管理员!\n" + ex.ToString(), "连接失败!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    //这里是处理配置连接的语句入口,暂时先预留入口

                }
                finally
                {
                    if (isConnectSuccess)
                    {
                        //创建命令对象
                        MySqlCommand comGetKey = conn.CreateCommand();
                        comGetKey.CommandText = "select `userpwd` from `user` where `username`='" + txtUser.Text + "'";
                        //创建记录集存储查询结果
                        MySqlDataReader dr = comGetKey.ExecuteReader();
                        if (!dr.HasRows)
                        {
                            MessageBox.Show("请确认您的账号密码输入!", "错误的用户名/密码", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            txtPwd.Text = string.Empty;
                        }
                        else
                        {
                            dr.Read();
                            string pwdCheck = dr["userpwd"].ToString();
                            dr.Close();
                            //开始验证过程,注意,这里我使用了SHA-512作为加密方式,MD5已经不安全,再次跟广大读者声明,MD5已经不安全,请尽快更换至SHA-512以上更安全的加密方式,同时避免直接Hash,最好是加盐后多次Hash
                            byte[] byteUser = Encoding.UTF8.GetBytes(txtUser.Text);
                            byte[] bytePwd = Encoding.UTF8.GetBytes(txtPwd.Text);
                            SHA512 sha = new SHA512CryptoServiceProvider();
                            byte[] checkResultArray = sha.ComputeHash(byteUser);
                            byte[] temp = new byte[checkResultArray.Length + bytePwd.Length];
                            checkResultArray.CopyTo(temp, 0);
                            bytePwd.CopyTo(temp, checkResultArray.Length);
                            checkResultArray = sha.ComputeHash(temp);
                            string checkResult = Convert.ToBase64String(checkResultArray);
                            //检查Hash结果
                            if (pwdCheck == checkResult)
                            {
                                //打开主窗口
                                this.Hide();
                                frmMain Main = new frmMain();
                                Main.Show();
                            }
                        }
                    }
                    //关闭连接
                    if (conn.State != ConnectionState.Closed)
                    {
                        conn.Close();
                    }
                    conn.Dispose();
                }
            }

在这里我要提醒一下各位兄弟,这里由于代码还没仔细处理好的原因第一次获取密码验证的地方是没有检查的,请各位在那之前,做好有关的正则或者符号检查工作确认不会造成信息泄露(永远不要相信用户不会给你造成麻烦,这是我给你的忠告,嗯),其上的代码可以给你们作为参考,希望不会坑到你们啦(≥_≤)

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消