在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("对不起,注册失败···");
                    }
                }
            }
        }
    }
}

完!

c#程序中对密码进行加密的方法的更多相关文章

  1. 微信小程序中显示html富文本的方法

    微信小程序中显示html富文本的方法 使用方法:git地址:https://github.com/icindy/wxParse 一.下载wxParse文件 二.在要引入的页面的js文件中,引入文件 j ...

  2. node.js中用户密码的加密

    crypro实现用户密码的加密 在实际的项目中,只要涉及到用户的信息,就是十分重要的.设想一下数据库里面存放的用户的密码是明文的形式,后果是有多严重.所以今天给大家分享一下express中怎样实现用户 ...

  3. C#控制台或应用程序中两个多个Main()方法的可行性方案

    大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...

  4. C#控制台或应用程序中两个多个Main()方法的设置

    大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...

  5. 在数据库中sql查询很快,但在程序中查询较慢的解决方法

    在写java的时候,有一个方法查询速度比其他方法慢很多,但在数据库查询很快,原来是因为程序中使用参数化查询时参数类型错误的原因 select * from TransactionNo, fmis_Ac ...

  6. 微信小程序中获取高度及设备的方法

    由于js中可以采用操纵dom的方法来获取页面元素的高度,可是在微信小程序中不能操纵dom,经过查找之后发现仅仅只有以下几个方法可以获取到高度 wx.getSystemInfoSync().window ...

  7. 开发微信小程序 中遇到的坑 及解决方法

    1.wx.request 只能访问 https 解决: 新建项目  不填appid  即可访问 localhost 2.页面中多重三元表达式  解析有问题 解决: <!--{{index}} { ...

  8. ABAP程序中关于长文本的处理方法

    现象描述 长文本在SAP的运用主要体现在一些notes的记录,或者一些比较长的文本的存取,比如工作流的审批意见,采购申请和采购订单的附加说明等等.如下图: 处理过程 1:SAP中所有的长文本都存在两张 ...

  9. SpringBoot项目配置文件中密码的加密

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/15565862.html 版权声明:本文为博主原创文章,转载请附上博文链接! 公众号:追梦1819 ...

随机推荐

  1. 【Win10】SplitView控件

    SplitView是Win10中的新控件. 用于呈现两部分视图. 一个视图是主要内容,另一个视图是用于导航.(也就是通常说的汉堡菜单.) 主要结构: <SplitView> <Spl ...

  2. JS 函数的柯里化与反柯里化

    ===================================== 函数的柯里化与反柯里化 ===================================== [这是一篇比较久之前的总 ...

  3. Go收藏

    Go项目收藏 电子书 1.Go Web 编程 2.Go入门指南(the-way-to-go_ZH_CN) 3.Go语言圣经(中文版) Go by Example 中文 一些Go英文电子书 High P ...

  4. word20161222

    T.120 tag / 标记 TAPI, Telephony API / 电话 API target journaling / 目标日志 taskbar / 任务栏 taskbar button / ...

  5. 【河北省队互测】 gcd BZOJ 2818

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sa ...

  6. Linux下的压缩和解压缩命令——jar

    原文链接:http://blog.chinaunix.net/uid-692788-id-2681136.htmlJAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有 ...

  7. Python-第三方库requests详解

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  8. ant 使用指南

    一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant. 开发环境: System:Windo ...

  9. jquery 双向select控件bootstrap Dual listbox

    http://www.cnblogs.com/hangwei/p/5040866.html       -->jquery 双向select控件bootstrap Dual listboxhtt ...

  10. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...