我正在开发一个需要用户名和密码才能登录的ASP.NET应用程序。我希望邀请一组用户登录该站点并使用该应用程序。但是,我不想单独发送用户名和密码,而是发送单个链接(该链接将由应用程序自动生成,并且其中将包含用户名/密码的加密版本。用户名和密码为此用户存储在数据库中。单击该链接将自动将用户登录到应用程序。我已经看到了一些Web应用程序的这种行为,但我不确定如何实现。任何帮助都表示赞赏。
感谢 卡比尔
答案 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读取请求参数并解密页面加载中的密码/用户名并使用用户凭据将其重定向到所需页面。