C# 毕业论文提交系统 密码学大作业


前言

这个毕业论文提交系统是我参照网上的慢慢写出来的,第一次写博客可能写的不怎么样,望见谅。
本系统是基于C#语言的windows窗体程序,使用Visual Studio 2019编译器编写。数据库使用SQL Sever。
bilibili演示视频:https://www.bilibili.com/video/bv1Yh411e7vh
全部项目百度云链接:https://pan.baidu.com/s/1a6DBNSJzZ8w4OuVV-JBo5A
提取码:18iv


以下是本篇文章正文内容。

一、数据及项目的存储

1-1 数据库(SQL server)

数据库用户的密码采用MD5密文存储
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1-2 项目目录

在这里插入图片描述

二、数据库的连接

通过在app.config文件中构造连接字符串(方便后面调用)

conn为后续调用该连接字符串的名称,localhost为数据库服务器名称,uid为SQL身份验证的id,pwd为密码,DataBase为数据库名称

<connectionStrings>
    <add name ="conn" connectionString="Server =localhost; uid = sa; pwd = 123456; DataBase = mimaxue"/>
  </connectionStrings>

三、登录界面的实现

3-1 验证码功能的实现

在这里插入图片描述
定义CreatRandomCode方法,通过对list中预先存储好的 字符,根据需要的验证码长度(比如4位)伪随机选取4个字符放到code中组成验证码。将验证码显示到lable标签中,点击lable可以刷新

public static string CreateRandomCode(int length)  //生成由数字和大小写字母组成的验证码
        {
   
            string list = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
            //list中存放着验证码的元素
            Random random = new Random();
            string code = "";   //验证码
            for (int i = 0; i < length; i++)   //循环4次得到一个伪随机的4位数验证码
            {
   
                code += list[random.Next(0, list.Length - 1)];
            }
            return code;
        }
        
private void label5_Click(object sender, EventArgs e)
        {
   
            label5.Text = CreateRandomCode(4);   //生成一个4位的验证码,并显示在标签lable上。
        }

3-2 用户登录(含SQL注入测试)

在这里插入图片描述
在这里插入图片描述

读取用户输入的用户名和密码以及验证码,首先检验验证码输入是否正确,如果错误刷新验证码重新输入,如果正确进行下面步骤。将用户输入的密码进行MD5加密同数据库存储的密码进行核对,判断密码是否正确。通过SqlConnection方法来对数据库建立连接,这里使用Sq1Parameter方法来声明变量,这样构造的SQL语句中会插入@,可以防止SQL注入。成功登录后系统将用户身份及名称显示在MessageBox中。

private void button2_Click(object sender, EventArgs e)
        {
   
            string username = this.username.Text;
            string password = this.password.Text;
            string yzm = this.yanzhengma.Text;
            if (yanzhengma.Text.ToLower() != label5.Text.ToLower())   //验证码输入错误
            {
   
                MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                label5_Click(sender, e);   //刷新一遍验证码
                yanzhengma.Text = "";    //清空验证码输入框
                return;
            }
            //创建MD5加密对象
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            //把加密的数据转化为字节数组
            byte[] bytes = Encoding.UTF8.GetBytes(password);
            //对字节数组进行加密
            bytes = md5.ComputeHash(bytes);
            string pwd = BitConverter.ToString(bytes).Replace("-", "");
            //第一 读取APP.config文件中的连接字符串
            string conStr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            //第二 创建连接对象并指定连接
            SqlConnection conn = new SqlConnection(conStr);
            //第三 打开连接
            conn.Open();
            //通过其他的ADO对象,实现数据库的相关操作
            //第四 进行用户登录操作
            //1)构造SQL查询字符串(含参)
            string sql = string.Format("select * from users where username = @username and password = @pwd");
            //2)创建SqlParameter对象,并设置参数值
            SqlParameter param1 = new SqlParameter("username", username);
            SqlParameter param2 = new SqlParameter("pwd", pwd);
            //3)创建命令对象SqlCommand并添加参数
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(param1);
            cmd.Parameters.Add(param2);
            SqlDataReader reader = cmd.ExecuteReader();
            if (!reader.HasRows)
            {
   
                MessageBox.Show("用户名或密码错误!请重试", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                this.username.Text = "";
                this.password.Text = "";
                this.yanzhengma.Text = "";
                label5.Text = CreateRandomCode(4);   //生成一个4位的验证码,并显示在标签lable上。
                return;
            }
            while (reader.Read())
            {
   
                string status = reader["status"].ToString();
                string sname = reader["username"].ToString();
                string str = string.Format("你好{0}:{1}! 欢迎使用本系统 ", status, sname);
                MessageBox.Show(str);
            }
            reader.Close();
            //第五 关闭连接
            conn.Close();
            //跳转到主界面
            this.Hide();
            user main = new user();
            main.Show();
            
        }

3-3 管理员登录

在这里插入图片描述
管理员登录和用户登录基本相似,构造sql查询语句时添加了status检验,用来检验登录账户是否为管理员。

private void button3_Click(object sender, EventArgs e)
        {
   
            string username = this.username.Text;
            string password = this.password.Text;
            string yzm = this.yanzhengma.Text;
            if (yanzhengma.Text.ToLower() != label5.Text.ToLower())   //验证码输入错误
            {
   
                MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                label5_Click(sender, e);   //刷新一遍验证码
                yanzhengma.Text = "";    //清空验证码输入框
                return;
            }
            //创建MD5加密对象
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            //把加密的数据转化为字节数组
            byte[] bytes = Encoding.UTF8.GetBytes(password);
            //对字节数组进行加密
            bytes = md5.ComputeHash(bytes);
            string pwd = BitConverter.ToString(bytes).Replace("-", "");
            //读取APP.config文件中的连接字符串
            string conStr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            //创建连接对象并指定连接
            SqlConnection conn = new SqlConnection(conStr);
            //打开连接
            conn.Open();
            //查找管理员
            string sql = string.Format("select * from users where username = @username and password = @pwd and status = '管理员'");
            //创建SqlParameter对象,并设置参数值
            SqlParameter param1 = new SqlParameter("username", username);
            SqlParameter param2 = new SqlParameter("pwd", pwd);
            //创建命令对象SqlCommand并添加参数
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值