Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c语言中设置密钥验证时间#_C# - Fatal编程技术网

C# 如何在c语言中设置密钥验证时间#

C# 如何在c语言中设置密钥验证时间#,c#,C#,我正在使用c#生成密钥,并通过邮件将其发送给用户。这部分我能做到。 我想设置密钥验证时间。当密钥验证时间到期时,它将不起作用。我该怎么做 密钥生成并通过邮件发送 public IHttpActionResult SendMail() { string mailBodyhtml = KeyGenerator.GetUniqueKey(); var msg = new MailMessage("from@gmail.com", "to1@gmail.c

我正在使用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(存储,用户访问时间)