zoukankan      html  css  js  c++  java
  • c#程序中对密码进行加密的方法

    在ADO.NET中,向数据库添加数据时,怎样对数据中的密码进行加密?(也就是说在数据表中也看不到用户的密

      码,只是一些经过编译后的字符串,以防止数据库管理员利用用户的密码进行非法操作。)
        首先,在c#WinForm程序中引入命名空间,"using System.Web.Security;",此命名空间是专门用来对程序进 

      行安全设置的;
        其次,定义一个string类型的变量,用来接收用输入的密码;
      string passWord = this.textBox1.Text.Trim();
        取到密码之后,接下来便是对密码进行加密处理:
      string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
        最后,将加密后的密码pwd添加到数据库中去。
      insert into userInfo(uName,pwd) values('{0}','{1}');select @@identity", this.txtUID.Text.Trim   

    (),passwrod);
      示例代码:
      using System.Web.Security;

        //取得文本框中的密码
        string pwd = this.txtPwd1.Text.Trim();
        //对密码加密
        string passwrod = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
        //创建SQL语句,将加密后的密码保存到数据库中
        string insCmd =
              string.Format("insert into userInfo(uName,pwd) values('{0}','{1}');select @@identity",  

              this.txtUID.Text.Trim(),passwrod);
        using (SqlCommand cmd = new SqlCommand(insCmd, Form1.Connection))
        {
            int uid = Convert.ToInt32(cmd.ExecuteScalar());
            //int uid = int.Parse(cmd.ExecuteScalar());//error
            if (uid > 0)
            {
                string mess = string.Format("恭喜,注册成功!您的号码是{0}",uid);
                MessageBox.Show(mess);
            }
            else
            {
                MessageBox.Show("对不起,注册失败了!");
            }
        }

      这样加密之后保证了用户密码的安全,但是又出现了一个问题,即用户登录时怎样对密码进行验证,该不会让

     用户去记住加密后的那一长串字符串吧? 答案当然是否定的,那怎样解决呢?
      应该这样解决:
      在用户登录时,得到用户输入的密码;
      然后,将取到的密码再次进行加密;
      之后,根据用户名取出该用户在数据库中的真实密码;
      最后,将刚刚进行加密的密码与数据库密码进行比对,即可完成用户登录操作。
      示例代码:
      string pwd = this.txtPwd1.Text.Trim();
                    string pwd1 = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
                    string uid = this.txtUID.Text.Trim();
                    string selCmd = string.Format("select pwd from userINfo where uName='{0}'", uid);
                    string password = "";
                    using (SqlCommand cmd = new SqlCommand(selCmd, Form1.Connection))
                    {
                        password= cmd.ExecuteScalar().ToString();
                    
                    }
                    if (password == pwd1)
                    {
                        MessageBox.Show("登录成功");
                    }
                    else
                    {
                        MessageBox.Show("密码错误!");
                    }
    完整实例(复制即可用):

    1.数据库代码:

    use tempdb
    go
    if exists (select * from sysobjects where name = 'UserInfo')
    drop table UserInfo
    go
    create table UserInfo
    (
     uId int identity(1,1) not null,
     uName nvarchar(20) not null,
     uAge int not null,
     password nvarchar(200) not null
    )
    go
    alter table UserInfo
    add constraint PK_uID primary key (uId)
    alter table UserInfo
    add constraint CK_uAge check (uAge between 0 and 100)
    go
    select * from UserInfo

    2.c#代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Web.Security;  //安全加密

    namespace 密码加密示例
    {
        public partial class Form1 : Form
        {
            //创建数据库连接字符串
            static readonly string strConn = "Data Source=.;Initial Catalog=tempdb;Integrated Security=True";
            //创建数据库连接对象
            static SqlConnection connection = null;
            //属性
            public static SqlConnection Connection
            {
                get 
                {
                    if (connection == null || connection.State != ConnectionState.Open)
                    {
                        connection = new SqlConnection(strConn);  //连接数据库
                        connection.Open();  //打开数据库
                    }
                    return Form1.connection;  //返回一个连接
                }
                
            }

            public Form1()
            {
                InitializeComponent();
            }

            /// <summary>
            /// 检查用户输入
            /// </summary>
            /// <returns></returns>
            private bool CheckInput()
            {
                if (string.IsNullOrEmpty(this.txtName.Text))
                {
                    this.errorPro.SetError(this.txtName, "用户名不能为空!");
                    this.txtName.Focus();
                    return false;
                }
                else
                {
                    this.errorPro.Dispose();  //终止提示错误
                }
                if (string.IsNullOrEmpty(this.txtAge.Text))
                {
                    this.errorPro.SetError(this.txtAge, "姓名不能为空!");
                    this.txtAge.Focus();
                    return false;
                }
                else
                {
                    this.errorPro.Dispose();
                }
                if (string.IsNullOrEmpty(this.txtPass.Text))
                {
                    this.errorPro.SetError(this.txtPass, "密码不能为空!");
                }
                else
                {
                    this.errorPro.Dispose();
                }
                return true;
            }

            /// <summary>
            /// 添加数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnAdd_Click(object sender, EventArgs e)
            {
                if (this.CheckInput())
                {
                    //获取用户输入的密码
                    string password = this.txtPass.Text.Trim();
                    //对密码进行加密
                    string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "md5");
                    //创建SQL语句,将加密后的密码保存到数据库
                    string insCmd = string.Format("insert into UserInfo values ('{0}','{1}','{2}')",
                        this.txtName.Text.Trim(), this.txtAge.Text.Trim(),pwd); 
                    using (SqlCommand cmd = new SqlCommand(insCmd,Form1.Connection))
                    {
                        if (cmd.ExecuteNonQuery() > 0)
                        {
                            MessageBox.Show("恭喜您,注册成功!");
                        }
                        else
                        {
                            MessageBox.Show("对不起,注册失败···");
                        }
                    }
                }
            }
        }
    }

    完!

  • 相关阅读:
    【CSS3】纯CSS3制作页面切换效果
    【CSS3】分类豆腐块菜单浮动效果
    【CSS3】使用CSS3制作全屏切换效果
    【JQ】toggle / slideToggle / fadeToggle 的区别
    【CSS3 + 原生JS】上升的方块动态背景
    【CSS3 + 原生JS】移动的标签
    【原生JS】简单取随机数
    【原生JS】键盘事件
    【CSS3】loading动画
    【原生JS】层叠轮播图
  • 原文地址:https://www.cnblogs.com/janeaiai/p/5039659.html
Copyright © 2011-2022 走看看