C#编写注册界面将密码通过MD5加密后存入数据库
来源:互联网 发布:西门子s7200编程手册 编辑:程序博客网 时间:2024/04/29 06:50
<span style="font-family:Microsoft YaHei;font-size:18px;"># 将密码转换为md5 32位</span>
public static string GetMD5(String input) { string cl = input; string pwd = ""; MD5 md5 = MD5.Create();//实例化一个md5对像 // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for (int i = 0; i < s.Length; i++) { // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd = pwd + s[i].ToString("X"); } return pwd; }
C# 实现登录帐号和密码和实现将MD5密码添加到数据库中
示例代码如下:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Security.Cryptography;
- using System.Data.SqlClient;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
-
- namespace TestMD5
- {
- public partial class LoginForm : Form
- {
- public LoginForm()
- {
- InitializeComponent();
- }
-
- private void LoginForm_Load(object sender, EventArgs e)
- {
- users = new List<Users>();
- this.cboName.Text = "<请输入用户名>";
-
- if (File.Exists("Userinfo.dll"))
- {
-
-
-
- FileStream fs = new FileStream("Userinfo.dll", FileMode.Open, FileAccess.Read);
- BinaryFormatter bf = new BinaryFormatter();
-
- users = (List<Users>)bf.Deserialize(fs);
-
- for (int i = 0; i < users.Count; i++)
- {
- if (i == 0 && users[i].UserPassword != "")
- {
- this.chkCode.Checked = true;
- this.txtPassword.Text = users[i].UserPassword;
- }
- this.cboName.Items.Add(users[i].UserName);
- }
-
- fs.Close();
- this.cboName.SelectedIndex = 0;
- }
- }
-
- private void btnCancle_Click(object sender, EventArgs e)
- {
- this.Close();
- }
-
-
- List<Users> users;
- private void btnLogin_Click(object sender, EventArgs e)
- {
- #region 插入用户信息到数据库
-
-
-
-
-
-
-
-
-
- #endregion
-
- string loginName = this.cboName.Text.Trim();
-
- for (int i = 0; i < this.cboName.Items.Count; i++)
- {
- if (this.cboName.Items[i].ToString() == loginName)
- {
- this.cboName.Items.RemoveAt(i);
- break;
- }
- }
-
- for (int i = 0; i < users.Count; i++)
- {
- if (users[i].UserName == loginName)
- {
- users.RemoveAt(i);
- break;
- }
- }
-
- this.cboName.Items.Insert(0, loginName);
- Users user;
- if (this.chkCode.Checked == true)
- user = new Users(loginName,EncryptDES(this.txtPassword.Text.Trim()));
- else
- user = new Users(loginName, "");
-
- users.Insert(0, user);
- this.cboName.SelectedIndex = 0;
- }
-
- private void LoginForm_FormClosed(object sender, FormClosedEventArgs e)
- {
-
-
-
- FileStream fs = new FileStream("Userinfo.dll", FileMode.Create, FileAccess.Write);
- BinaryFormatter bf = new BinaryFormatter();
- bf.Serialize(fs, users);
- fs.Close();
- }
-
- private void cboName_SelectedIndexChanged(object sender, EventArgs e)
- {
- for (int i = 0; i < users.Count; i++)
- {
- if (users[i].UserName == this.cboName.Text)
- {
- this.txtPassword.Text = users[i].UserPassword;
- if (users[i].UserPassword != "")
- this.chkCode.Checked = true;
- else
- this.chkCode.Checked = false;
- }
- }
- }
-
-
- #region MD5密码加密的方法
-
-
-
-
-
- public static string Md5_16(string decryptString)
- {
- MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
- string str = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(decryptString)), 4, 8);
-
-
-
- str = str.Replace("-", "");
- return str;
- }
-
-
-
-
-
-
- public static string Md5_32(string decryptString)
- {
- MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
- string str = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(decryptString)));
-
-
-
- str = str.Replace("-", "");
- return str;
- }
-
-
-
-
-
-
- public static string Md5_32II(string decryptString)
- {
- string pwd = "";
- MD5 md5 = MD5.Create();
- byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(decryptString));
- for (int i = 0; i < s.Length; i++)
- pwd = pwd + s[i].ToString("X");
- return pwd;
- }
- #endregion
-
-
- #region 将用户登录信息添加到数据库中
-
-
-
-
-
-
- public static int AddUser(string uName, string uPassword)
- {
- if (UserIsExist(uName) == false)
- {
- const string UNAME = "@uName";
- const string UPWD = "@uPwd";
-
- SqlParameter[] sqlParames = new SqlParameter[2];
- sqlParames[0] = new SqlParameter(UNAME, SqlDbType.VarChar, 20);
- sqlParames[0].Value = uName;
- sqlParames[1] = new SqlParameter(UPWD, SqlDbType.VarChar, 32);
- sqlParames[1].Value = uPassword;
-
- string sqlCmd = "insert into userInfo values(@uName,@uPwd)";
- SqlConnection conn = new SqlConnection("server=.;database=MD5test;integrated security=sspi");
- SqlCommand cmd = new SqlCommand(sqlCmd, conn);
- cmd.Parameters.AddRange(sqlParames);
- cmd.CommandType = CommandType.Text;
- int i = 0;
- try
- {
- conn.Open();
- i = cmd.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- finally
- {
- conn.Close();
- }
- return i;
- }
- else
- return -1;
- }
-
-
-
-
-
-
- private static bool UserIsExist(string uName)
- {
- SqlConnection conn = new SqlConnection("server=.;database=MD5test;integrated security=sspi");
- SqlCommand cmd = new SqlCommand("select 1 from userInfo where uName = '" + uName + "'", conn);
- int i = -1;
- try
- {
- conn.Open();
- i = (int)cmd.ExecuteScalar();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- finally
- {
- conn.Close();
- }
- if (i == 0)
- return false;
- return true;
- }
- #endregion
-
-
- #region DES密码加密(可逆转,用于本地记住密码)
-
- private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
- private static string encryptKey = "abcdefgh";
-
-
-
-
-
-
-
- public static string EncryptDES(string encryptString)
- {
- try
- {
- byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
- byte[] rgbIV = Keys;
- byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
- DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
- MemoryStream mStream = new MemoryStream();
- CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Convert.ToBase64String(mStream.ToArray());
- }
- catch
- {
- return encryptString;
- }
- }
-
-
-
-
-
-
- public static string DecryptDES(string decryptString)
- {
- try
- {
- byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
- byte[] rgbIV = Keys;
- byte[] inputByteArray = Convert.FromBase64String(decryptString);
- DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
- MemoryStream mStream = new MemoryStream();
- CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Encoding.UTF8.GetString(mStream.ToArray());
- }
- catch
- {
- return decryptString;
- }
- }
- #endregion
-
-
-
- }
-
- [Serializable]
- class Users
- {
- string _userName;
- public string UserName
- {
- get { return _userName; }
- set { _userName = value; }
- }
-
- string _userPassword;
- public string UserPassword
- {
- get
- {
- if(_userPassword != "")
- return LoginForm.DecryptDES(_userPassword);
- return _userPassword;
- }
- set { _userPassword = value; }
- }
-
- public Users(string userName,string userPassword)
- {
- _userName = userName;
- _userPassword = userPassword;
- }
- }
- }
DES加密类。[code=csharp] #region MD5加密 密码解密
/// <summary>
/// MD5加密
/// </summary>
/// <param name="pToEncrypt">待加密字符</param>
/// <param name="sKey">密钥字符</param>
/// <returns>加密后字符</returns>
private static string sKey="12345678";
public string MD5Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
#endregion(字符)[/code]
然后我写了一个登录窗体和修改密码窗体,用SQL数据库录入一条数据,这条数据时用户名1密码2登录数据库,我要怎样调用DES类,才能实现数据库里的这条数据的密码是加密后的数据,然后在登录窗体我输入密码后,也变成加密后的数据到数据库里去匹配密码。关键是我不会调用,我不知道怎样写才能是输入的密码加密存到数据库里!
【作者精力有限更多常见加密算法参见】1、常用的md5加密程序(16位、32位、小写、大写) -http://wenku.baidu.com/view/b0ea1575a417866fb84a8ec2.html
2、MD5加密算法(16位,32位)的C#的实现_ http://wenku.baidu.com/view/ba65101cbd64783e09122bf9.html
1 0