C#SHA1演算法及注意事項
要求:使用hash演算法SHA-1計算字串的hash值,得到16進位制形式的字串(共40個字母),並全部轉換為英文字母大寫形式。
上面的要求也就是標準SHA1的結果再轉為大寫
SHA1線上加密演算法工具:http://tool.oschina.net/encrypt?type=2
多種工具
幾種演算法略微差別
C#演算法:
方法一:
/// <summary>
/// 基於Sha1的自定義加密字串方法:輸入一個字串,返回一個由40個字元組成的十六進位制的雜湊雜湊(字串)。
/// </summary>
/// <param name="str"> 要加密的字串</param>
/// <returns>加密後的十六進位制的雜湊雜湊(字串)</returns>
public static string Sha1Signature(string str)
{
var buffer = Encoding.UTF8.GetBytes(str);
var data = SHA1.Create().ComputeHash(buffer);
StringBuilder sub = new StringBuilder();
foreach (var t in data)
{
sub.Append(t.ToString("X2"));
}
return sub.ToString();
}
方法二:比上面的寫的好一點,但是這裡用的預設編碼
/// <summary>
/// 對字串進行SHA1加密
/// </summary>
/// <param name="strIN">需要加密的字串</param>
/// <returns> 密文</returns>
public static string SHA1_Encrypt(string Source_String)
{
byte[] StrRes = Encoding.Default.GetBytes(Source_String);
HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
StrRes = iSHA.ComputeHash(StrRes);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in StrRes)
{
EnText.AppendFormat("{0:x2}", iByte);
}
return EnText.ToString().ToUpper();
}
方法三:加密和驗證
public static string GetSha1Hash(string input)
{
byte[] inputBytes = Encoding.Default.GetBytes(input);
SHA1 sha = new SHA1CryptoServiceProvider();
byte[] result = sha.ComputeHash(inputBytes);
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sBuilder.Append(result[i].ToString("x2"));
}
return sBuilder.ToString().ToUpper();
}
public static bool VerifySha1Hash(string input, string hash)
{
string hashOfInput = GetSha1Hash(input);
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
if (0 == comparer.Compare(hashOfInput, hash))
{
return true;
}
else
{
return false;
}
}
方法四:
/// <summary>
/// SHA1加密
/// </summary>
/// <param name="content">待加密的字串</param>
/// <param name="encode">編碼方式</param>
/// <returns></returns>
public static String Sha1Sign(String content,Encoding encode)
{
try
{
SHA1 sha1 = new SHA1CryptoServiceProvider();//建立SHA1物件
byte[] bytes_in = encode.GetBytes(content);//將待加密字串轉為byte型別
byte[] bytes_out = sha1.ComputeHash(bytes_in);//Hash運算
sha1.Dispose();//釋放當前例項使用的所有資源
String result = BitConverter.ToString(bytes_out);//將運算結果轉為string型別
result = result.Replace("-", "").ToUpper();
return result;
}catch(Exception ex)
{
return ex.Message;
}
}
執行結果:
使用工具也只是大小寫差別:
ps:一定要注意在原串中如果多了一個空格,都會得到不一樣的結果。
相關推薦
C#SHA1演算法及注意事項
要求:使用hash演算法SHA-1計算字串的hash值,得到16進位制形式的字串(共40個字母),並全部轉換為英文字母大寫形式。 上面的要求也就是標準SHA1的結果再轉為大寫 SHA1線上加密演算法工具:http://tool.oschina.net/enc
【C++】向量(vector) 基本使用方法及注意事項
介紹: 向量(Vector)是一個封裝了動態大小陣列的順序容器(Sequence Container)。跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是一個能夠存放任意型別的動態陣列。 特點: 1.順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素
C# numericUpDown控制元件用法總結及注意事項
numericUpDown控制元件在使用的過程當中,有些用法會不太一樣,下面做一總結。 1. 判斷numericUpDown的value屬性是否為空 使用過Numericupdown控制元件的童鞋初期應該都會碰到一個奇怪的問題,在刪除了控制元件裡的值之後,裡
C++中vector的用法及注意事項
#include<vector>; 一、vector 的初始化:可以有五種方式,舉例說明如下: (1)vector<int> a(10); //定義了10個整型元素的向量(尖括號中為元素型別名,它可以是任何合法的資料型別),但沒有給出初值,其值是不確
關於C語言中自增和自減運算子的使用及注意事項
++是自增運算子,是單目運算子,其作用是使單個變數的值增1。它有兩種使用情況: 1)前置:++i,先執行i=i+1,再使用i值; 2)後置:i++,先使用i值,再執行i=i+1。 例如: j=3;k=++j; 執行“k=++j”語句後,k=4,j=4。上述語句等效為: j=
C# 根據當前時間計算周、月、季度、年的換算及注意事項
public static void ShowTime() { /* * 根據當前時間進行時間段轉換: * 本週、下週、上週 *
C++結構體指標 常用用法及注意事項
總述: c++結構體指標,顧名思義就是指向結構體的一個指標,這篇部落格作用是記錄c++結構體指標的常用用法及我經常犯的一個錯誤。 定義結構體: struct My{ My *left; My *right; int val; My(){}
二叉樹常用操作演算法集、解釋及注意事項
二叉樹是一種常用的資料結構,在程式中也經常需要使用二叉樹,但是你所使用語言卻並不一定提供了二叉樹這種資料型別,所以為了方便使用,我們可以自己實現一個二叉樹的資料型別。在需要時就像使用其他已定義的型別一樣方便。 下面給出一些本人寫的演算法和解釋(基於C語言),希望對讀者寫一
C++中strncpy函式和strncpy_s函式的使用及注意事項
在掌握了strcpy函式和strcpy_s函式之後,我們不可避免地會談到strncpy函式和strncpy_s函式,其實這四個函式的功能幾乎一致,就是對兩個字串陣列進行復制和賦值,但是具體實現有一點點區別。 首先來說一下strncpy函式。該函式依然還是存在於標準名稱空間s
[C++]【類】友元的三種宣告及注意事項
class A{ friend void fri_fun(A); private: int a=9; }; void fri_fun(A aa){ cout<<aa.a<<endl; } 在程
【VUE】git命令列程式碼提交流程及注意事項
本篇為我在提交程式碼的過程中使用過的命令 僅做記錄參考 git命令還有很多 其他功能 可自行百度 命令git add (1)git add . 提交全部修改檔案 (2)git add +檔名 提交單個檔案 命令 git commit -m '描述’ eg: git commi
重灌系統後,重新安裝ORACLE加環境變數配置、客戶端PL/SQL的安裝過程,及注意事項(避免再次踩坑)
(1)首先了解什麼是OERACLE及Oracle與PL/SQL是什麼關係: ORACLE是資料庫,有客戶端和伺服器; PLSQL Developer只是第三方工具,服務於ORACLE,類似的工具還有Toad,sqlplus,sql developer等等; 安裝PLSQL Developer
Windows下RabbitMQ安裝及注意事項
Windows下RabbitMQ安裝及注意事項 簡介 背景 1. RabbitMQ是一個由erlang開發的AMQP(Advanved Message Queue)的開源實現。 RabbitMQ是實現AMQP(高階訊息佇列協議)的訊
XV6環境搭建及注意事項
Ubuntu16.04SLT 64位 工具鏈 sudo apt-get install gcc-multilib libsdl1.2-dev, libtool-bin, libglib2.0-dev, libz-dev, and libpixman-1-dev. 下載
仙人劍花怎麼養 仙人劍花的養殖方法及注意事項
劍花也稱霸王花、七星劍花、龍骨花,為仙人掌科量天尺屬植物量天尺的花。夏、秋間採收淨花,縱向切開(基部相連),略蒸後,晒乾。量天尺又名:龍骨花(海南保亭),霸王鞭(海南三亞,廣東肇慶),三角柱、三稜箭(北京俗稱)。很多朋友不知道如何養殖仙人劍花,下面來介紹一下。 從生長環境溫度方面來說
阿里雲備案幕布申請郵寄及注意事項
阿里雲備案需要幕布(貌似個別地區,例如魔都是不需要幕布的),阿里雲免費提供幕布,很多使用者不清楚阿里雲幕布去哪申請,阿里雲惠網分享阿里雲備案關於幕布相關問題: 一:阿里雲幕布長啥樣? 二:備案幕布申請: 阿里雲備案系統即可申請幕布,首先需要先完成備案初審,初審後登入 阿里雲備案系統,辦理網站
CSS變數實用指南及注意事項
近年來,一些動態特性已經開始成為 CSS 語言本身的一部分。 CSS變數 – 官方的術語為 “自定義屬性” – 已經已經加入規範並且具有很好的瀏覽器支援,而 CSS mixins 目前正在開發中 。 在本文中,你將瞭解如何開始將CSS變數整合到CSS開發工作流程中,讓你的樣式表更好維護,且減少重複。 讓我
MySQL索引的使用及注意事項
索引是儲存引擎用於快速找到記錄的一種資料結構。索引優化應該是對查詢效能優化最有效的手段了。索引能夠輕易將查詢效能提高几個數量級,"最優"的索引有時比一個"好的"索引效能要好兩個數量級。 索引可以包含一個(單列索引)或多個列(組合索引)的值。 想要使用組合索引首先要了解一個原則:最左字首原則。如果索引包含多
Git- .gitignore匹配規則及注意事項
.gitignore檔案的匹配規則 Windows中可以通過echo 命令或者用Windows中的bash建立.gitignore檔案。其主要的匹配規則如下: *.a # 忽略所有 .a 結尾的檔案 !lib.a # 但 lib.a 除外 TODO # 僅僅
分享知識-快樂自己:Struts2(動態方法、動態結果、萬用字元、方法內部跳轉、action跳轉、OGNL 的使用及注意事項)
這裡主要以案例演示:涵蓋以下知識點 1、動態方法呼叫:使用關鍵 符號 ! 進行操作 例如:/名稱空間 ! 方法名 2、動態結果集:就是說,通過後臺返回的結果 ${} 獲取,重定向到符合預期的頁面。 3、萬能萬用字元:*_* :第一個 * 為 類名、第二個 * 為方