2016-04-19 85 views
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」的異常其他信息:要解密的數據的長度無效。

我希望任何人都可以幫助我。謝謝!

+9

這實際上是錯誤的,我不知道從哪裏開始。你不應該使用md5哈希,你不應該使用3DES來存儲密碼,你也不應該通過'解密'它們來檢查密碼。從你的研究開始。看看鹽漬的哈希。 PBKDF2是一種流行的選擇。我並不是說要苛刻,但是在安全領域犯下錯誤很容易,如果沒有人指出他們的漏洞,你不會更聰明。我會建議,即使這只是一個學習練習,但值得花時間正確地學習。 – PaulG

+1

您應該「加密」輸入的密碼並將其與您針對用戶存儲的「加密」密碼進行比較。永遠不要「解密」。你實際上在這裏雖然有哈希 –

+3

談論密碼時不應該使用'加密'一詞。它應該是'散列',這與加密有着根本的區別。這篇文章似乎可以從快速瀏覽進一步的研究:http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right – PaulG

回答

0

你的代碼適合我。檢查你輸入的加密密鑰是否與解密相同

+3

這不是一個答案,它應該被添加爲評論。 –