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

首頁 > 編程 > C# > 正文

C#計算字符串哈希值(MD5、SHA)的方法小結

2020-01-24 01:31:55
字體:
來源:轉載
供稿:網友

本文實例講述了C#計算字符串哈希值(MD5、SHA)的方法。分享給大家供大家參考。具體如下:

一、關于本文

本文中是一個類庫,包括下面幾個函數:

① 計算32位MD5碼(大小寫):Hash_MD5_32

② 計算16位MD5碼(大小寫):Hash_MD5_16

③ 計算32位2重MD5碼(大小寫):Hash_2_MD5_32

④ 計算16位2重MD5碼(大小寫):Hash_2_MD5_16

⑤ 計算SHA-1碼(大小寫):Hash_SHA_1

⑥ 計算SHA-256碼(大小寫):Hash_SHA_256

⑦ 計算SHA-384碼(大小寫):Hash_SHA_384

⑧ 計算SHA-512碼(大小寫):Hash_SHA_512

編譯后被打包成文件HashTools.dll,其他程序可以在添加引用后對這些函數進行調用

二、類庫中各函數代碼

1. 類庫結構

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HashTools{ public class HashHelper {  //各個函數 }}

2. 計算32位MD5碼(大小寫):Hash_MD5_32

/// <summary>/// 計算32位MD5碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_MD5_32(string word, bool toUpper = true){ try {  System.Security.Cryptography.MD5CryptoServiceProvider MD5CSP   = new System.Security.Cryptography.MD5CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = MD5CSP.ComputeHash(bytValue);  MD5CSP.Clear();  //根據計算得到的Hash碼翻譯為MD5碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

3. 計算16位MD5碼(大小寫):Hash_MD5_16

/// <summary>/// 計算16位MD5碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_MD5_16(string word, bool toUpper = true){ try {  string sHash = Hash_MD5_32(word).Substring(8, 16);  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

4. 計算32位2重MD5碼(大小寫):Hash_2_MD5_32

/// <summary>/// 計算32位2重MD5碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_2_MD5_32(string word, bool toUpper = true){ try {  System.Security.Cryptography.MD5CryptoServiceProvider MD5CSP   = new System.Security.Cryptography.MD5CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = MD5CSP.ComputeHash(bytValue);  //根據計算得到的Hash碼翻譯為MD5碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  bytValue = System.Text.Encoding.UTF8.GetBytes(sHash);  bytHash = MD5CSP.ComputeHash(bytValue);  MD5CSP.Clear();  sHash = "";  //根據計算得到的Hash碼翻譯為MD5碼  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

5. 計算16位2重MD5碼(大小寫):Hash_2_MD5_16

/// <summary>/// 計算16位2重MD5碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_2_MD5_16(string word, bool toUpper = true){ try {  System.Security.Cryptography.MD5CryptoServiceProvider MD5CSP    = new System.Security.Cryptography.MD5CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = MD5CSP.ComputeHash(bytValue);  //根據計算得到的Hash碼翻譯為MD5碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  sHash = sHash.Substring(8, 16);  bytValue = System.Text.Encoding.UTF8.GetBytes(sHash);  bytHash = MD5CSP.ComputeHash(bytValue);  MD5CSP.Clear();  sHash = "";  //根據計算得到的Hash碼翻譯為MD5碼  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  sHash = sHash.Substring(8, 16);  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

6. 計算SHA-1碼(大小寫):Hash_SHA_1

/// <summary>/// 計算SHA-1碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_SHA_1(string word, bool toUpper = true){ try {  System.Security.Cryptography.SHA1CryptoServiceProvider SHA1CSP   = new System.Security.Cryptography.SHA1CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = SHA1CSP.ComputeHash(bytValue);  SHA1CSP.Clear();  //根據計算得到的Hash碼翻譯為SHA-1碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

7. 計算SHA-256碼(大小寫):Hash_SHA_256

/// <summary>/// 計算SHA-256碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_SHA_256(string word, bool toUpper = true){ try {  System.Security.Cryptography.SHA256CryptoServiceProvider SHA256CSP   = new System.Security.Cryptography.SHA256CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = SHA256CSP.ComputeHash(bytValue);  SHA256CSP.Clear();  //根據計算得到的Hash碼翻譯為SHA-1碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

8. 計算SHA-384碼(大小寫):Hash_SHA_384

/// <summary>/// 計算SHA-384碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_SHA_384(string word, bool toUpper = true){ try {  System.Security.Cryptography.SHA384CryptoServiceProvider SHA384CSP   = new System.Security.Cryptography.SHA384CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = SHA384CSP.ComputeHash(bytValue);  SHA384CSP.Clear();  //根據計算得到的Hash碼翻譯為SHA-1碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

9. 計算SHA-512碼(大小寫):Hash_SHA_512

/// <summary>/// 計算SHA-512碼/// </summary>/// <param name="word">字符串</param>/// <param name="toUpper">返回哈希值格式 true:英文大寫,false:英文小寫</param>/// <returns></returns>public static string Hash_SHA_512(string word, bool toUpper = true){ try {  System.Security.Cryptography.SHA512CryptoServiceProvider SHA512CSP   = new System.Security.Cryptography.SHA512CryptoServiceProvider();  byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(word);  byte[] bytHash = SHA512CSP.ComputeHash(bytValue);  SHA512CSP.Clear();  //根據計算得到的Hash碼翻譯為SHA-1碼  string sHash = "", sTemp = "";  for (int counter = 0; counter < bytHash.Count(); counter++)  {   long i = bytHash[counter] / 16;   if (i > 9)   {    sTemp = ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp = ((char)(i + 0x30)).ToString();   }   i = bytHash[counter] % 16;   if (i > 9)   {    sTemp += ((char)(i - 10 + 0x41)).ToString();   }   else   {    sTemp += ((char)(i + 0x30)).ToString();   }   sHash += sTemp;  }  //根據大小寫規則決定返回的字符串  return toUpper ? sHash : sHash.ToLower(); } catch (Exception ex) {  throw new Exception(ex.Message); }}

三、函數調用

建立項目ComputeHash,添加對HashTools.dll庫的引用。并添加代碼:

復制代碼 代碼如下:
using HashTools;

然后在Main函數中添加下列代碼:

static void Main(string[] args){ Console.WriteLine("MD5 of /"abc/""); Console.WriteLine("MD5_32(Upper): {0}",   HashHelper.Hash_MD5_32("abc")); Console.WriteLine("MD5_32(Lower): {0}",  HashHelper.Hash_MD5_32("abc", false)); Console.WriteLine("MD5_16(Upper): {0}",  HashHelper.Hash_MD5_16("abc")); Console.WriteLine("MD5_16(Lower): {0}",  HashHelper.Hash_MD5_16("abc", false)); Console.WriteLine("2_MD5_32(Upper): {0}",   HashHelper.Hash_2_MD5_32("abc")); Console.WriteLine("2_MD5_32(Lower): {0}",   HashHelper.Hash_2_MD5_32("abc", false)); Console.WriteLine("2_MD5_32(Upper): {0}",   HashHelper.Hash_2_MD5_16("abc")); Console.WriteLine("2_MD5_32(Lower): {0}",   HashHelper.Hash_2_MD5_16("abc", false)); Console.WriteLine("SHA of /"abc/""); Console.WriteLine("SHA-1(Upper): {0}",   HashHelper.Hash_SHA_1("abc")); Console.WriteLine("SHA-1(Lower): {0}",   HashHelper.Hash_SHA_1("abc", false)); Console.WriteLine("SHA-256(Upper): {0}",  HashHelper.Hash_SHA_256("abc")); Console.WriteLine("SHA-256(Lower): {0}",  HashHelper.Hash_SHA_256("abc", false)); Console.WriteLine("SHA-384(Upper): {0}",  HashHelper.Hash_SHA_384("abc")); Console.WriteLine("SHA-384(Lower): {0}",  HashHelper.Hash_SHA_384("abc", false)); Console.WriteLine("SHA-512(Upper): {0}",   HashHelper.Hash_SHA_512("abc")); Console.WriteLine("SHA-512(Lower): {0}",   HashHelper.Hash_SHA_512("abc", false)); Console.ReadLine();}

運行結果如下:

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岚皋县| 泗水县| 阜新| 息烽县| 东兴市| 增城市| 铁岭县| 云南省| 泊头市| 温州市| 桃江县| 蕲春县| 岳阳县| 嘉鱼县| 武安市| 高雄市| 雷州市| 来安县| 黔东| 迁安市| 巴林左旗| 拉孜县| 开原市| 大石桥市| 怀化市| 中江县| 白河县| 永顺县| 黎川县| 龙川县| 阿巴嘎旗| 霍州市| 华宁县| 罗甸县| 广州市| 仲巴县| 陈巴尔虎旗| 长春市| 拜泉县| 宿州市| 新巴尔虎左旗|