我正在尝试解密存储在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 :(得分: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编码的,因此需要在解密前对其进行解码。