2012-01-11 291 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