1. 程式人生 > >C#SHA1演算法及注意事項

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、萬能萬用字元:*_*  :第一個 * 為 類名、第二個 * 為方