解密ASPNET_Membership密码

时间:2012-01-11 12:54:01

标签: asp.net vb.net encryption

我正在尝试解密存储在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)行,它显示错误为

  

“要解密的数据长度无效。”

1 个答案:

答案 0 :(得分:1)

我认为您需要首先对其进行解码:

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编码的,因此需要在解密前对其进行解码。