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

本文关键字:密码 链接 网站 登录 用于 用户 一个 加密 创建 | 更新日期: 2023-09-27 18:24:55

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

谢谢kabir

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

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读取请求参数并解密页面加载中的密码/用户名,然后使用用户凭据将其重定向到所需页面。