2012-01-11 114 views
1

我試圖解密我的密碼存儲在aspnet_membership表...解密ASPNET_Membership密碼

我使用下面的代碼,

Dim encodedPassword() As Byte = System.Text.Encoding.UTF8.GetBytes(password) 
encodedPassword = MyBase.EncryptPassword(encodedPassword) 
Dim decryptedPassword() As Byte = MyBase.DecryptPassword(encodedPassword) 
If (decryptedPassword IsNot Nothing) Then 
    Return System.Text.Encoding.UTF8.GetString(decryptedPassword, 0, decryptedPassword.Length) 
End If 

但在DecryptPassword(encodedPassword)行它顯示誤差

「要解密的數據長度無效。」

+0

如果密碼由內置的MembershipProvider加密,則無法解密密碼。 – Eranga 2012-01-11 13:37:56

+0

@Eranga - 對於默認提供程序,它取決於passwordFormat設置。默認情況下它是「散列」,但可以設置爲「加密」。 – PHeiberg 2012-01-11 14:20:19

+0

@PHeiberg你是對的。忘記了'passwordFormat'選項。 – Eranga 2012-01-11 14:32:57

回答

1

我認爲你需要Base64編碼解碼首先:

byte[] encodedPassword = Convert.FromBase64String(pass); 
byte[] bytes = this.DecryptPassword(encodedPassword); 

或VB.NET:

Dim encodedPassword As Byte() = Convert.FromBase64String(pass) 
Dim bytes As Byte() = Me.DecryptPassword(encodedPassword) 

編輯:作爲@Eranga指出,這是在假設所使用的MembershipProvider實際上支持解密,而對於默認提供者passwordFormat setting控制它是否爲「散列」,「加密」或「普通」。默認情況下,該設置是「哈希」,這意味着不可能解密。

加密密碼在保存到數據庫之前是經過base64編碼的,因此需要在解密之前對它們進行解碼。

+0

我已經使用Base64解碼...還是一樣的錯誤仍然存​​在.... – 2012-01-12 07:22:37

+0

@ArasuR - 密碼格式是否設置爲加密? – PHeiberg 2012-01-12 08:48:24

+0

是的,它被設置爲加密.... – 2012-01-12 12:02:02