国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

基于C#對用戶密碼使用MD5加密與解密

2019-10-29 21:34:18
字體:
供稿:網(wǎng)友
C#中常涉及到對用戶密碼的加密于解密的算法,其中使用MD5加密是最常見的的實現(xiàn)方式。本文總結(jié)了通用的算法并結(jié)合了自己的一點小經(jīng)驗,分享給大家
 

C#中常涉及到對用戶密碼的加密于解密的算法,其中使用MD5加密是最常見的的實現(xiàn)方式。本文總結(jié)了通用的算法并結(jié)合了自己的一點小經(jīng)驗,分享給大家。

一.使用16位、32位、64位MD5方法對用戶名加密

1)16位的MD5加密

/// <summary>/// 16位MD5加密/// </summary>/// <param name="password"></param>/// <returns></returns>public static string MD5Encrypt16(string password){  var md5 = new MD5CryptoServiceProvider();  string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8);  t2 = t2.Replace("-", "");  return t2;} 

2)32位的MD5加密

/// <summary>/// 32位MD5加密/// </summary>/// <param name="password"></param>/// <returns></returns>public static string MD5Encrypt32(string password){  string cl = password;  string pwd = "";  MD5 md5 = MD5.Create(); //實例化一個md5對像  // 加密后是一個字節(jié)類型的數(shù)組,這里要注意編碼UTF8/Unicode等的選擇   byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));  // 通過使用循環(huán),將字節(jié)類型的數(shù)組轉(zhuǎn)換為字符串,此字符串是常規(guī)字符格式化所得  for (int i = 0; i < s.Length; i++)  {    // 將得到的字符串使用十六進制類型格式。格式后的字符是小寫的字母,如果使用大寫(X)則格式后的字符是大寫字符     pwd = pwd + s[i].ToString("X");  }  return pwd;} 

3)64位的MD5加密

public static string MD5Encrypt64(string password){  string cl = password;  //string pwd = "";  MD5 md5 = MD5.Create(); //實例化一個md5對像  // 加密后是一個字節(jié)類型的數(shù)組,這里要注意編碼UTF8/Unicode等的選擇   byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));  return Convert.ToBase64String(s);}

4)使用MD5為用戶密碼加密

/// <summary>/// 加密用戶密碼/// </summary>/// <param name="password">密碼</param>/// <param name="codeLength">加密位數(shù)</param>/// <returns>加密密碼</returns>public static string md5(string password, int codeLength){  if (!string.IsNullOrEmpty(password))  {    // 16位MD5加密(取32位加密的9~25字符)     if (codeLength == 16)    {      return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5").ToLower().Substring(8, 16);    }    // 32位加密    if (codeLength == 32)    {      return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5").ToLower();    }  }  return string.Empty;}

      由于MD5是不可逆的,所以加密之后就無法解密,取用戶名和密碼時候,需要再加密一邊用戶輸入的數(shù)據(jù)與數(shù)據(jù)庫中已加密的數(shù)據(jù)進行比對。如果比對結(jié)果一致,則可以判定登陸成功!代碼如下所示:

/// <summary>/// 登陸/// </summary>public Model.UserInfo UserLogOn(string USERID, string pwd, out string statusCode){  //假設已經(jīng)通過用戶ID獲取到UserInfo的Model對象  Model.UserInfo model = GetModel(USERID);  if (model != null)  {    if (model.PASSWORD == MD5Encrypt64(pwd))    {      statusCode = "登陸成功";    }    else {      statusCode = “密碼錯誤”;    }  }  else  {    statusCode = "用戶不存在!";    model = null;  }    return model;} 

5)通過DESCryptoServiceProvider對象對字符串進行加密解密

/// <summary>/// DES數(shù)據(jù)加密/// </summary>/// <param name="targetValue">目標值</param>/// <param name="key">密鑰</param>/// <returns>加密值</returns>public static string Encrypt(string targetValue, string key){  if (string.IsNullOrEmpty(targetValue))  {    return string.Empty;  }  var returnValue = new StringBuilder();  var des = new DESCryptoServiceProvider();  byte[] inputByteArray = Encoding.Default.GetBytes(targetValue);  // 通過兩次哈希密碼設置對稱算法的初始化向量    des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile                      (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").                        Substring(0, 8), "sha1").Substring(0, 8));  // 通過兩次哈希密碼設置算法的機密密鑰    des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile                      (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")                        .Substring(0, 8), "md5").Substring(0, 8));  var ms = new MemoryStream();  var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);  cs.Write(inputByteArray, 0, inputByteArray.Length);  cs.FlushFinalBlock();  foreach (byte b in ms.ToArray())  {    returnValue.AppendFormat("{0:X2}", b);  }  return returnValue.ToString();}

此種算法可以通過加密密鑰進行解密,解密方法如下:

/// <summary>/// DES數(shù)據(jù)解密/// </summary>/// <param name="targetValue"></param>/// <param name="key"></param>/// <returns></returns>public static string Decrypt(string targetValue, string key){  if (string.IsNullOrEmpty(targetValue))  {    return string.Empty;  }  // 定義DES加密對象  var des = new DESCryptoServiceProvider();  int len = targetValue.Length / 2;  var inputByteArray = new byte[len];  int x, i;  for (x = 0; x < len; x++)  {    i = Convert.ToInt32(targetValue.Substring(x * 2, 2), 16);    inputByteArray[x] = (byte)i;  }  // 通過兩次哈希密碼設置對稱算法的初始化向量    des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile                      (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").                        Substring(0, 8), "sha1").Substring(0, 8));  // 通過兩次哈希密碼設置算法的機密密鑰    des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile                      (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")                        .Substring(0, 8), "md5").Substring(0, 8));  // 定義內(nèi)存流  var ms = new MemoryStream();  // 定義加密流  var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);  cs.Write(inputByteArray, 0, inputByteArray.Length);  cs.FlushFinalBlock();  return Encoding.Default.GetString(ms.ToArray());}

以上內(nèi)容是基于C#對用戶密碼使用MD5加密與解密的全部敘述,希望大家喜歡。



注:相關教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 肥乡县| 天水市| 山西省| 冀州市| 呼和浩特市| 兰考县| 德钦县| 汕头市| 汪清县| 嵩明县| 含山县| 界首市| 隆尧县| 双辽市| 南宁市| 报价| 五常市| 阜宁县| 宝兴县| 嘉义市| 江口县| 武定县| 民权县| 武安市| 和田县| 什邡市| 钟祥市| 孟连| 炉霍县| 丽水市| 儋州市| 瓦房店市| 习水县| 高台县| 永丰县| 洛阳市| 吉林市| 湟源县| 三穗县| 绥棱县| 龙里县|