1
大家好,我是vb.net編程新手。我想加密和解密用戶密碼,我想出了下面的代碼。如何加密和解密字符串到base64?
Imports System.Security.Cryptography
Imports System.Text
Public Class UPdatePass
Dim DES As New TripleDESCryptoServiceProvider
Dim MD5 As New MD5CryptoServiceProvider
Function Encrypt(StringInput As String, Key As String) As String
DES.Key = MD5Hash(Key)
DES.Mode = CipherMode.ECB
Dim buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(StringInput)
Return Convert.ToBase64String(DES.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length))
End Function
Function Decrypt(EncryptedString As String, Key As String) As String
DES.Key = MD5Hash(Key)
DES.Mode = CipherMode.ECB
Dim Buffer As Byte() = Convert.FromBase64String(EncryptedString)
Return ASCIIEncoding.ASCII.GetString(DES.CreateDecryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))
End Function
Function MD5Hash(value As String) As Byte()
Return MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(value))
End Function
End Class
當我執行代碼並解密時,我收到此錯誤消息。
mscorlib.dll 中發生未處理的類型爲「System.Security.Cryptography.CryptographicException」的異常其他信息:要解密的數據的長度無效。
我希望任何人都可以幫助我。謝謝!
這實際上是錯誤的,我不知道從哪裏開始。你不應該使用md5哈希,你不應該使用3DES來存儲密碼,你也不應該通過'解密'它們來檢查密碼。從你的研究開始。看看鹽漬的哈希。 PBKDF2是一種流行的選擇。我並不是說要苛刻,但是在安全領域犯下錯誤很容易,如果沒有人指出他們的漏洞,你不會更聰明。我會建議,即使這只是一個學習練習,但值得花時間正確地學習。 – PaulG
您應該「加密」輸入的密碼並將其與您針對用戶存儲的「加密」密碼進行比較。永遠不要「解密」。你實際上在這裏雖然有哈希 –
談論密碼時不應該使用'加密'一詞。它應該是'散列',這與加密有着根本的區別。這篇文章似乎可以從快速瀏覽進一步的研究:http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right – PaulG