最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年08月18日 15:18:34   作者:北風(fēng)其涼  
這篇文章主要介紹了C#計(jì)算字符串哈希值(MD5、SHA)的方法,以實(shí)例形式較為詳細(xì)的分析總結(jié)了C#計(jì)算字符串哈希值的各種常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

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

一、關(guān)于本文

本文中是一個(gè)類庫,包括下面幾個(gè)函數(shù):

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

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

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

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

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

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

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

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

編譯后被打包成文件HashTools.dll,其他程序可以在添加引用后對(duì)這些函數(shù)進(jìn)行調(diào)用

二、類庫中各函數(shù)代碼

1. 類庫結(jié)構(gòu)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HashTools
{
 public class HashHelper
 {
  //各個(gè)函數(shù)
 }
}

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

/// <summary>
/// 計(jì)算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();
  //根據(jù)計(jì)算得到的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;
  }
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

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

/// <summary>
/// 計(jì)算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. 計(jì)算32位2重MD5碼(大小寫):Hash_2_MD5_32

/// <summary>
/// 計(jì)算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);
  //根據(jù)計(jì)算得到的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 = "";
  //根據(jù)計(jì)算得到的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;
  }
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

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

/// <summary>
/// 計(jì)算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);
  //根據(jù)計(jì)算得到的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 = "";
  //根據(jù)計(jì)算得到的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);
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

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

/// <summary>
/// 計(jì)算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();
  //根據(jù)計(jì)算得到的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;
  }
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

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

/// <summary>
/// 計(jì)算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();
  //根據(jù)計(jì)算得到的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;
  }
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

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

/// <summary>
/// 計(jì)算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();
  //根據(jù)計(jì)算得到的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;
  }
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

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

/// <summary>
/// 計(jì)算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();
  //根據(jù)計(jì)算得到的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;
  }
  //根據(jù)大小寫規(guī)則決定返回的字符串
  return toUpper ? sHash : sHash.ToLower();
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

三、函數(shù)調(diào)用

建立項(xiàng)目ComputeHash,添加對(duì)HashTools.dll庫的引用。并添加代碼:

復(fù)制代碼 代碼如下:
using HashTools;

然后在Main函數(shù)中添加下列代碼:

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();
}

運(yùn)行結(jié)果如下:

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C# Winform 實(shí)現(xiàn)屏蔽鍵盤的win和alt+F4的實(shí)現(xiàn)代碼

    C# Winform 實(shí)現(xiàn)屏蔽鍵盤的win和alt+F4的實(shí)現(xiàn)代碼

    最近在做一個(gè)惡搞程序,就是打開后,程序獲得桌面的截圖然后,然后全屏顯示在屏幕上,用戶此時(shí)則不能進(jìn)行任何操作。
    2009-02-02
  • WPF使用DrawingContext實(shí)現(xiàn)二維繪圖

    WPF使用DrawingContext實(shí)現(xiàn)二維繪圖

    這篇文章介紹了WPF使用DrawingContext實(shí)現(xiàn)二維繪圖的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • c#哈希算法的實(shí)現(xiàn)方法及思路

    c#哈希算法的實(shí)現(xiàn)方法及思路

    這篇文章主要介紹了c#哈希算法的實(shí)現(xiàn)方法及思路,有需要的朋友可以參考一下
    2013-12-12
  • C#中this指針的用法示例

    C#中this指針的用法示例

    這篇文章主要介紹了C#中this指針的用法,對(duì)初學(xué)者而言是非常重要的概念,必須加以熟練掌握,需要的朋友可以參考下
    2014-08-08
  • 詳解C#App.config和Web.config加密

    詳解C#App.config和Web.config加密

    本篇文章給大家分享了C#App.config和Web.config加密的相關(guān)知識(shí)點(diǎn)以及具體代碼步驟,有興趣的朋友參考學(xué)習(xí)下。
    2018-05-05
  • C#動(dòng)態(tài)執(zhí)行字符串(動(dòng)態(tài)創(chuàng)建代碼)的實(shí)例代碼

    C#動(dòng)態(tài)執(zhí)行字符串(動(dòng)態(tài)創(chuàng)建代碼)的實(shí)例代碼

    在編寫C#程序的時(shí)候,有時(shí)我們需要?jiǎng)討B(tài)生成一些代碼并執(zhí)行。然而C#不像JavaScript有一個(gè)Eval函數(shù),可以動(dòng)態(tài)的執(zhí)行代碼。所有這些功能都要我們自己去完成
    2013-03-03
  • WPF實(shí)現(xiàn)類似ChatGPT逐字打印效果的示例代碼

    WPF實(shí)現(xiàn)類似ChatGPT逐字打印效果的示例代碼

    前一段時(shí)間ChatGPT類的應(yīng)用十分火爆,這類應(yīng)用在回答用戶的問題時(shí)逐字打印輸出,像極了真人打字回復(fù)消息,本文就來利用WPF模擬一下這種逐字打印的效果吧
    2023-08-08
  • C#分屏控件用法實(shí)例

    C#分屏控件用法實(shí)例

    這篇文章主要介紹了C#分屏控件用法實(shí)例,需要的朋友可以參考下
    2014-08-08
  • C#中IntPtr類型的具體使用

    C#中IntPtr類型的具體使用

    本文主要介紹了C#中IntPtr類型的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C# 郵箱mail 發(fā)送類

    C# 郵箱mail 發(fā)送類

    此類的功能包括發(fā)送郵件,郵箱格式是否正確,和在不發(fā)送郵件的情況下判斷郵箱用戶名和密碼是否正確,鑒于POP檢查郵箱用戶名和密碼出現(xiàn)錯(cuò)誤情況返回結(jié)果的延遲,用異步線程解決此問題,見代碼
    2015-06-06

最新評(píng)論

延川县| 襄樊市| 陈巴尔虎旗| 海盐县| 酉阳| 新郑市| 大洼县| 河西区| 孟村| 五大连池市| 台南县| 勃利县| 南召县| 醴陵市| 镇坪县| 淳化县| 康乐县| 闻喜县| 巫溪县| 平果县| 宣汉县| 宜兴市| 民乐县| 北流市| 韶山市| 苗栗县| 呼图壁县| 漾濞| 亳州市| 苏州市| 东兰县| 兰溪市| 广宁县| 宁德市| 榆社县| 旌德县| 虞城县| 陆川县| 仁布县| 济阳县| 西和县|