.NET的System.Security.Cryptography命名空間本身是提供加密服務,散列函數,對稱與非對稱加密算法等功能。實際上,大部分情況下已經滿足了需求,而且.NET實現的都是目前國際上比較權威的,標准化的算法,所以還是安全可靠的。但也有一些場合,需要自己實現一些安全散列算法。不僅僅是學習,也可以進行測試以及相關研究。而今天要介紹的正式這樣一個包括了目前幾乎所有散列函數算法實現的.NET開源組件,大家可以實際使用,查看或者修改等。滿足更多不同人,不同層次的需求。那就看看相關基礎知識以及組件的介紹。
NET開源目錄:【目錄】本博客其他.NET開源項目文章目錄
本文原文地址:.NET平台開源項目速覽(11)KwCombinatorics排列組合使用案例(1)
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
官方網站:http://hashlib.codeplex.com/
使用比較簡單,參考官方例子即可。