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("对不起,注册失败···");
}
}
}
}
}
}
完!
c#程序中对密码进行加密的方法的更多相关文章
- 微信小程序中显示html富文本的方法
微信小程序中显示html富文本的方法 使用方法:git地址:https://github.com/icindy/wxParse 一.下载wxParse文件 二.在要引入的页面的js文件中,引入文件 j ...
- node.js中用户密码的加密
crypro实现用户密码的加密 在实际的项目中,只要涉及到用户的信息,就是十分重要的.设想一下数据库里面存放的用户的密码是明文的形式,后果是有多严重.所以今天给大家分享一下express中怎样实现用户 ...
- C#控制台或应用程序中两个多个Main()方法的可行性方案
大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...
- C#控制台或应用程序中两个多个Main()方法的设置
大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...
- 在数据库中sql查询很快,但在程序中查询较慢的解决方法
在写java的时候,有一个方法查询速度比其他方法慢很多,但在数据库查询很快,原来是因为程序中使用参数化查询时参数类型错误的原因 select * from TransactionNo, fmis_Ac ...
- 微信小程序中获取高度及设备的方法
由于js中可以采用操纵dom的方法来获取页面元素的高度,可是在微信小程序中不能操纵dom,经过查找之后发现仅仅只有以下几个方法可以获取到高度 wx.getSystemInfoSync().window ...
- 开发微信小程序 中遇到的坑 及解决方法
1.wx.request 只能访问 https 解决: 新建项目 不填appid 即可访问 localhost 2.页面中多重三元表达式 解析有问题 解决: <!--{{index}} { ...
- ABAP程序中关于长文本的处理方法
现象描述 长文本在SAP的运用主要体现在一些notes的记录,或者一些比较长的文本的存取,比如工作流的审批意见,采购申请和采购订单的附加说明等等.如下图: 处理过程 1:SAP中所有的长文本都存在两张 ...
- SpringBoot项目配置文件中密码的加密
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/15565862.html 版权声明:本文为博主原创文章,转载请附上博文链接! 公众号:追梦1819 ...
随机推荐
- 美团HD(4)-二级联动效果
DJNavDropView.m #import "DJNavDropView.h" #import "DJCategory.h" #import "D ...
- JavaScript - 正则表达式
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符则匹配失败. 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默 ...
- CJCMS系列---说说项目中的缓存实现(1)
缓存者,临时文件交换区也.主要就是方便查找,提高查找效率(效率在于读内存速度比读硬盘快). 大多数的项目的缓存都是通过设定过期时间来做的,可是我对于这样的替换策略不以为然,而且会导致混乱. 有人说: ...
- .NET使用NPOI2.0导入导出Excel
NPOI开源地址:http://npoi.codeplex.com/ NPOI教程: http://tonyqus.sinaapp.com/ 具体的不在这里写了,感兴趣的可以去官网. 先来说导出的例子 ...
- HTML+CSS布局技巧及兼容问题【阅读季】
在IE6和IE7中,行高值必须大于字体的2px以上才能保证字体的完整显示或当作为链接时能显示下划线. IE6 下去掉 input等元素 的边框 border: 0 none; 所有浏览器都可以了 边框 ...
- How to Delete XML Publisher Data Definition Template
DECLARE -- Change the following two parameters VAR_TEMPLATECODE VARCHAR2(100) := 'CUX_CHANGE_RPT1 ...
- 如何基于Azure平台实现MySQL HA(方法论篇)
我们都知道,相较于传统的数据中心,Pulic cloud也有劣势,比如说数据库的HA,很多熟悉公有云平台的读者都知道,因为出于安全性性考虑以及一些技术条件的限制,很多本地数据中心的mysql HA方法 ...
- poi2015 bzoj4377-4386训练
就按时间顺序写吧 完成度:10/10 3.30 bzoj4385 首先一定是删去连续d个数,然后枚举终点,起点显然有单调性,用单调队列乱搞搞就可以啦 bzoj4378 首先才结论:可行当且仅当把所有大 ...
- Android插件化框架研究-DroidPlugin
直接贴上我做的ppt.
- ORACLE LINUX 6.3 + ORACLE 11.2.0.3 RAC + VBOX安装文档
ORACLE LINUX 6.3 + ORACLE 11.2.0.3 RAC + VBOX安装文档 2015-10-21 12:51 525人阅读 评论(0) 收藏 举报 分类: Oracle RA ...