C# 如何在c语言中设置密钥验证时间#
我正在使用c#生成密钥,并通过邮件将其发送给用户。这部分我能做到。 我想设置密钥验证时间。当密钥验证时间到期时,它将不起作用。我该怎么做 密钥生成并通过邮件发送C# 如何在c语言中设置密钥验证时间#,c#,C#,我正在使用c#生成密钥,并通过邮件将其发送给用户。这部分我能做到。 我想设置密钥验证时间。当密钥验证时间到期时,它将不起作用。我该怎么做 密钥生成并通过邮件发送 public IHttpActionResult SendMail() { string mailBodyhtml = KeyGenerator.GetUniqueKey(); var msg = new MailMessage("from@gmail.com", "to1@gmail.c
public IHttpActionResult SendMail()
{
string mailBodyhtml = KeyGenerator.GetUniqueKey();
var msg = new MailMessage("from@gmail.com", "to1@gmail.com", "Hello", mailBodyhtml);
msg.To.Add("tomail@gmail.com");
msg.IsBodyHtml = true;
var smtpClient = new SmtpClient("smtp.gmail.com", 587); //if your from email address is "from@hotmail.com" then host should be "smtp.hotmail.com"**
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = new NetworkCredential("abc@gmail.com", "#######");
smtpClient.EnableSsl = true;
smtpClient.Send(msg);
Console.WriteLine("Email Sended Successfully");
return Ok("Send Mail");
}
public class KeyGenerator
{
public static string GetUniqueKey()
{
int size = 6;
char[] chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
byte[] data = new byte[size];
using (RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
crypto.GetBytes(data);
}
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{
result.Append(chars[b % (chars.Length)]);
}
return result.ToString();
}
}
好的,有两种方法,一种是你应该保存过期时间和钥匙。因此,您可以相应地验证每个密钥。在中的第二个选项中,您应该将过期日期时间嵌入密钥并发送密钥 好的,有两种方法,一种是你应该存储过期时间和密钥。因此,您可以相应地验证每个密钥。在中的第二个选项中,您应该将过期日期时间嵌入密钥并发送密钥 我假设您不熟悉
c#
中的DateTime
,它应该足以实现您想要的结果
首先我们生成一个密钥并存储ExpDate和key
public class KeyGenerator
{
public static string GetUniqueKey()
{
int size = 6;
char[] chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
byte[] data = new byte[size];
using (RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
crypto.GetBytes(data);
}
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{
result.Append(chars[b % (chars.Length)]);
}
var ExpiryDate = DateTime.Now;
// before returning store it to somewhere along with user unique id to verify later..
// maybe user id is string
return result.ToString();
}
public static bool IsValidKey(string UserId)
{
// first get the Key and saved DateTime..
// lets assume ExpDate is DateTime object that was saved..
var Now = DateTime.Now;
if (DateTime.Compare(Now, ExpDate) <= 0)
{
// Now is earlier or exact ExpDate, we've saved earlier
// key is still valid
// handle this scenario
return true;
}
return false;
}
}
公共类密钥生成器
{
公共静态字符串GetUniqueKey()
{
int size=6;
字符[]字符=
“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz1234567890”;
字节[]数据=新字节[大小];
使用(RNGCryptoServiceProvider crypto=new RNGCryptoServiceProvider())
{
加密.GetBytes(数据);
}
StringBuilder结果=新的StringBuilder(大小);
foreach(数据中的字节b)
{
结果:追加(字符[b%(字符长度)]);
}
var expireydate=DateTime.Now;
//在返回之前,请将其与用户唯一id一起存储到某处,以便稍后验证。。
//也许用户id是字符串
返回result.ToString();
}
公共静态bool IsValidKey(字符串UserId)
{
//首先获取密钥并保存DateTime。。
//假设ExpDate是已保存的DateTime对象。。
var Now=DateTime.Now;
如果(DateTime.Compare(Now,ExpDate)我假设您不熟悉c#
中的DateTime
,那么它应该足以实现您想要的结果
首先我们生成一个密钥并存储ExpDate和key
public class KeyGenerator
{
public static string GetUniqueKey()
{
int size = 6;
char[] chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
byte[] data = new byte[size];
using (RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
crypto.GetBytes(data);
}
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{
result.Append(chars[b % (chars.Length)]);
}
var ExpiryDate = DateTime.Now;
// before returning store it to somewhere along with user unique id to verify later..
// maybe user id is string
return result.ToString();
}
public static bool IsValidKey(string UserId)
{
// first get the Key and saved DateTime..
// lets assume ExpDate is DateTime object that was saved..
var Now = DateTime.Now;
if (DateTime.Compare(Now, ExpDate) <= 0)
{
// Now is earlier or exact ExpDate, we've saved earlier
// key is still valid
// handle this scenario
return true;
}
return false;
}
}
公共类密钥生成器
{
公共静态字符串GetUniqueKey()
{
int size=6;
字符[]字符=
“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz1234567890”;
字节[]数据=新字节[大小];
使用(RNGCryptoServiceProvider crypto=new RNGCryptoServiceProvider())
{
加密.GetBytes(数据);
}
StringBuilder结果=新的StringBuilder(大小);
foreach(数据中的字节b)
{
结果:追加(字符[b%(字符长度)]);
}
var expireydate=DateTime.Now;
//在返回之前,请将其与用户唯一id一起存储到某处,以便稍后验证。。
//也许用户id是字符串
返回result.ToString();
}
公共静态bool IsValidKey(字符串UserId)
{
//首先获取密钥并保存DateTime。。
//假设ExpDate是已保存的DateTime对象。。
var Now=DateTime.Now;
if(DateTime.Compare)(现在,ExpDate)也许不仅仅是发送它,还可以存储它,以及过期日期?也许你想在用户尝试使用他们获得的密钥时处理它?也许在激活时处理它更好?我可以存储它,但如何设置过期时间?你可以在存储的任何地方存储密钥和DateTime
,然后使用date来检查它们比较(存储,用户访问时间)
可能不仅仅发送它,还存储它,以及过期日期?当用户尝试使用他们获得的密钥时,您可能想处理这个问题?也许在激活时处理这个问题更好?我可以存储它,但如何设置过期时间?您可以将密钥和DateTime
存储在任何地方,然后使用检查它们e> DateTime.Compare(存储,用户访问时间)