创建一个具有加密用户名/密码的链接,用于登录网站

时间:2014-09-28 11:04:16

标签: c# asp.net web

我正在开发一个需要用户名和密码才能登录的ASP.NET应用程序。我希望邀请一组用户登录该站点并使用该应用程序。但是,我不想单独发送用户名和密码,而是发送单个链接(该链接将由应用程序自动生成,并且其中将包含用户名/密码的加密版本。用户名和密码为此用户存储在数据库中。单击该链接将自动将用户登录到应用程序。我已经看到了一些Web应用程序的这种行为,但我不确定如何实现。任何帮助都表示赞赏。

感谢 卡比尔

1 个答案:

答案 0 :(得分:0)

public static class SecurePassword
{

    #region Fields

    static byte[] _entropy = System.Text.Encoding.Unicode.GetBytes("Db Config Password");

    #endregion

    #region Methods


    public static SecureString GetSecureString(string password)
    {
        SecureString secureString = new SecureString();

        foreach (char c in password)
        {
            secureString.AppendChar(c);
        }

        secureString.MakeReadOnly();
        return secureString;
    }


    public static string GetInsecureString(SecureString securePassword)
    {
        string password = string.Empty;

        IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(securePassword);

        try
        {
            password = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr);
        }
        finally
        {
            System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
        }

        return password;
    }


    public static string EncryptString(SecureString securePassword)
    {
        byte[] encryptedData = System.Security.Cryptography.ProtectedData.Protect(
                System.Text.Encoding.Unicode.GetBytes(GetInsecureString(securePassword)),
                _entropy,
                System.Security.Cryptography.DataProtectionScope.CurrentUser);

        return Convert.ToBase64String(encryptedData);

    }


    public static SecureString DecryptString(string encryptedData)
    {
        try
        {
            byte[] decryptedData = System.Security.Cryptography.ProtectedData.Unprotect(
                Convert.FromBase64String(encryptedData),
                _entropy,
                System.Security.Cryptography.DataProtectionScope.CurrentUser);

            return GetSecureString(System.Text.Encoding.Unicode.GetString(decryptedData));
        }
        catch
        {
            return new SecureString();
        }
    }

    #endregion


}

这是加密/解密的类。

以下是如何使用它:

string ecryptPass = BO.SecurePassword.EncryptString(BO.SecurePassword.GetSecureString(password));
string decryptPass = BO.SecurePassword.GetInsecureString((BO.SecurePassword.DecryptString(encrypedRequestParamPassword)));

当您转到页面时创建页面LinkLogin.aspx读取请求参数并解密页面加载中的密码/用户名并使用用户凭据将其重定向到所需页面。