从ASP.NET 2.0成员身份解密"加密"密码

QMK*_*vin 16 asp.net encryption passwords asp.net-membership .net-2.0

我需要解密位于我的aspnet_Membership表中的加密(非哈希)密码.在该数据库中我看到的密码(加密)和PasswordSalt领域,我可以看看我的web.config找到的machineKey> decryptionKey(验证="SHA1"解密="AES").

注意:我很乐意使用Hashed密码,但出于商业原因,我需要能够使用会员密码,SSO进出其他远程系统,因此使用加密(绝对不使用Clear - yukky!)

鉴于这一切,一定有找回密码的清除,平原和可读文本,即解密的方式,但我有真正的麻烦找到任何网站,或回答有关计算器(和我看所有的"相似问题"和"问题与"这里"相似的标题,解释了如何做到这一点.

我找到了MembershipProvider.DecryptPassword方法页面,但我仍然无法弄清楚如何在我的代码中实际使用它.我还通过谷歌发现了其他页面,但是大多数密码解密的例子似乎都不考虑salt和decrytionKey.

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

Ada*_*SFT 13

创建一个继承自SqlMembershipProvider的类,并在其中调用解密.

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

在查看反射器中的代码后,我看到Microsoft提供程序分两步解密.加密密码实际上是加密数据的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);
}
Run Code Online (Sandbox Code Playgroud)