網頁

ASP.NET MVC 3 新HTML Helper筆記(2) -- Crypto Class

相較於WebGrid類別Crypto類別就簡單多了,它的功能就是產生 Hash 值 (雜湊值),在一個有「會員」的網站裡,Hash 的產生及比對是非常常使用的功能,「密碼」大概是使用Hash值的第一名。

我們在未使用Crypto類別前,必須手動撰寫程式碼:

''' <summary>
''' 密碼進行SHA1加密
''' </summary>
''' <param name="str">密碼</param>
''' <returns>SHA1加密後字串</returns>
''' <remarks></remarks>
Private Function HashPassword(str As String) As String
    Dim rethash As String = ""

    Dim hash As System.Security.Cryptography.SHA1 = System.Security.Cryptography.SHA1.Create()
    Dim encoder As New System.Text.ASCIIEncoding()
    Dim combined As Byte() = encoder.GetBytes(str)
    hash.ComputeHash(combined)
    rethash = Convert.ToBase64String(hash.Hash)
    Return rethash
End Function

現在我們改變需求,想要改使用MD5就好?後來又想,還是安全點好,又想改使用SHA256,改到最後,能不能讓我自己選擇加密演算法?

現在使用Crypto類別,把相關加密演算法再一次包裝,讓我們可以更方便就能使用這些加密演算法,使用方法很簡單:

' 依傳入的數值,產生亂數字串,預設值16
' 例如:tSea8lnjrMOXu6idzV3kmA==,每次產生會不一樣
ViewBag.GenerateSalt = Crypto.GenerateSalt()
' 預設加密演算法 sha256
' KKBruce加密後: D85385CBDE31076D8E4933D3D221373264D2904CF7AF97273A57C1989527C431 
ViewBag.Hash = Crypto.Hash("KKBruce")
' 指定加密演算法
' KKBruce加密後: 9C56ACC0AF06D1F7355048B54B8C256E
ViewBag.HashMD5 = Crypto.Hash("KKBruce", "md5")
' 使用 sha1SHA1 加密演算法
' KKBruce加密後: 897AD572561960D4A03B1EE128E03252A81A89C4
ViewBag.HashSHA1 = Crypto.SHA1("KKBruce")
' 等於使用 Crypto.Hash("String")
' KKBruce加密後: D85385CBDE31076D8E4933D3D221373264D2904CF7AF97273A57C1989527C431
ViewBag.HashSHA256 = Crypto.SHA256("KKBruce")
' 回傳base-64加密字串
' KKBruce加密後: AN4fRENuQOoRctTasprxrkM7ba+ixadD9MSY0aWFnn7hbx1mvFFQqvNlxNz2D1ya0w==
ViewBag.HashPassword = Crypto.HashPassword("KKBruce")

' 驗證Hash
Dim hashedPassword As String = Crypto.HashPassword("KKBruce")
' True
ViewBag.VerifyHashedPassword1 = Crypto.VerifyHashedPassword(hashedPassword, "KKBruce")
' False
ViewBag.VerifyHashedPassword2 = Crypto.VerifyHashedPassword(hashedPassword, "Bruce")

不管是加密或驗證密碼,透過Crypto類別幫忙之後簡化複雜度。

參考:

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。