.net 2.0 - 从 ASP.NET 2.0 成员资格解密"加密"密码



我需要解密aspnet_Membership表中的加密(非哈希)密码。在该数据库中,我看到了Password(Encrypted)和PasswordSalt字段,并且我可以在web.config中查找machinekey>decryptionKey(validation="SHA1"decryption\="AES")。

注意:我很想使用哈希密码,但出于业务原因,我需要能够使用会员的密码,用于SSO进入和来自其他远程系统,因此使用加密(绝对不使用Clear-yukky!)

考虑到所有这些,肯定有一种方法可以将密码检索为清晰、易读的文本,即解密的文本,但我很难找到任何网站,也很难在stackoverflow上找到答案(我在这里查看了所有"类似的问题"one_answers"标题相似的问题"),这解释了如何做到这一点。

我已经找到了MembershipProvider.DecryptPassword方法页面,但我仍然不知道如何在代码中实际使用它。我也通过谷歌找到了其他页面,但大多数密码解密的例子似乎没有考虑salt和decryptionKey。

有没有人有一个直接的例子,可以从各自的位置选择密码、passwordsalt和decryptionkey,并使用它们来解密ASP.NET 2.0成员身份加密密码?

创建一个从SqlMembershipProvider继承的类,并在其中调用decrypt。

你需要的所有代码都可以在Naveen Kohli:的这篇文章中找到

在查看了反射器中的代码后,我发现微软提供者分两步解密。加密的密码实际上是加密数据的Base64转换。所以首先它将它从Base64,然后调用DecryptPassword方法。我只是做了最简单的事情复制了Microsoft实现中的代码,删除了所有检查它在做什么,然后使用它。下面的类是从SqlMembershipProvider派生的类,其方法仅以明文形式返回给定加密密码的密码。

namespace MembershipPasswordRecover
{
    public class NetFourMembershipProvider : SqlMembershipProvider
    {
        public string GetClearTextPassword(string encryptedPwd)
        {
            byte[] encodedPassword = Convert.FromBase64String(encryptedPwd);
            byte[] bytes = this.DecryptPassword(encodedPassword);
            if (bytes == null)
            {
                return null;
            }
            return Encoding.Unicode.GetString(bytes, 0x10, bytes.Length - 0x10);
        }
    }
}
static void Main(string[] args)
{
    var passwordManager = new NetFourMembershipProvider();
    var clearPWd = passwordManager.GetClearTextPassword("encryptedpasswordhere");
    Console.WriteLine(clearPWd);
}

相关内容

  • 没有找到相关文章

最新更新