哈希演算法集合類庫HashLib

.NET的System.Security.Cryptography命名空間本身是提供加密服務,散列函數,對稱與非對稱加密演算法等功能。實際上,大部分情況下已經滿足了需求,而且.NET實現的都是目前國際上比較權威的,標準化的演算法,所以還是安全可靠的。但也有一些場合,需要自己實現一些安全散列演算法。不僅僅是學習,也可以進行測試以及相關研究。而今天要介紹的正式這樣一個包括了目前幾乎所有散列函數演算法實現的.NET開源組件,大家可以實際使用,查看或者修改等。滿足更多不同人,不同層次的需求。那就看看相關基礎知識以及組件的介紹。

1.哈希演算法介紹

哈希函數,也就是通常所說的散列函數,常用的就是MD5,SHA了。哈希函數的作用就是相當於「指紋」,它是不可逆的,可以沒有密鑰,也可以有密鑰。給定一個任意長度的消息M,都可以產生固定長度的散列值m。

散列函數必須滿足的特性就是:計算M的散列值要快,反之則是相當困難的,且找到2個具有相同散列值的消息是困難的。一般用於防止篡改,比如很多大型的軟體下載的時候,都會在網站公布文件的散列值,下載後就可以根據工具計算其散列值對比,看文件是否正確或者遭到修改。

哈希完全不等於加密,很多時候開發人員都對用戶表中的密碼進行哈希後保存,實際上不叫做加密,只是相當於把密碼的「特徵指紋」保存下來,而對非法攻擊者來說,在不知道真實的「密碼」的情況下,得到有相同指紋的密碼是極為困難的。

例如我們在微軟官方下載文件的時候,會提供一個哈希驗證碼,目的就是讓你下載後,進行校驗,防止文件被修改。確保你下載到的文件是合法以及官方版本。

2.HashLib功能介紹

這裡可以找到大量的哈希演算法的C#實現。包括SHA3以及候選演算法。你可以使用它來對文件,數據流以及常用的數據類型進行哈希驗證。支持的演算法有:

1.非加密的32位哈希演算法:AP, BKDR, Bernstein, Bernstein1, DEK, DJB, ELF, FNV, FNV1a, JS, Jenkins3, Murmur2, Murmur3, OneAtTime, PJW, RS, Rotating, SDBM, ShiftAndXor, SuperFast

2.非加密的64位哈希演算法:FNV, FNV1a, Murmur2, SipHash

3.非加密的128位哈希演算法:Murmur3

4.校驗和演算法:Adler32, CRC32, CRC64

5.所有的演算法都基於System.Security.Cryptography命名空間:MD5, RIPEMD160, SHA1, SHA256, SHA384, SHA512

6.加密演算法:GOST, Grindahl, HAS160, Haval, MD2, MD4, MD5, Panama, RadioGatun, RIPEMD, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA0, SHA1, SHA224, SHA256, SHA384, SHA512, Snefru, Tiger, Tiger2, Whirlpool

7.SHA3及SHA2候選演算法:Blake, BlueMidnightWish, CubeHash, Echo, Fugue, Groestl, Hamsi, JH, Keccak, Luffa, Shabal, SHAvite3, SIMD, Skein

官方網站:hashlib.codeplex.com/

用比較簡單,參考官方例子即可。

推薦閱讀:

C++與C++/CLI的運行速度相比哪個快? C++/CLI和C#的運行速度一樣快?
誰能介紹學習.net core的書籍或者大神寫的blog?
如何在 WPF 或 UWP 應用中實現動態背景?
ASP.NET MVC 最好的視圖引擎是什麼?
如何在C#中存儲大量數據而不引發OutOfMemoryException?

TAG:NET | 軟體開發 | 開源項目 |