如何锁定令牌,基于asp.net中的时间

本文关键字:asp 基于 net 时间 令牌 何锁定 锁定 | 更新日期: 2023-09-27 18:30:03

Am使用以下程序根据时间(当前时间)生成令牌。它工作正常,这意味着将生成令牌。

         public string GenerateToken()
            {
                MD5 md5 = System.Security.Cryptography.MD5.Create();
                DateTime input = DateTime.Now;
                byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input.ToString());
                byte[] hash = md5.ComputeHash(inputBytes);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("X2"));
                }
                return sb.ToString();
            }

我使用以下程序尝试在2分钟内锁定(过期)令牌。这意味着我访问了GetToken() method,它将返回particular Time(current Time)的令牌。我需要为该令牌设置2分钟的有效时间。如果我在2分钟前访问getToken(),我需要获得相同的令牌。但我在2分钟后访问了getToken(),我需要获得新的令牌。我该怎么做?如何锁定代币?

     public string GetToken()
        {
            DateTime currentTime = DateTime.UtcNow;               
            tokenExp = DateTime.UtcNow.AddMinutes(2);
            if (tokenExp >= currentTime)
            {
                token = GenerateToken();
                return token;
            }
            else lock (tokenLock)
                {
                    if (tokenExp >= currentTime)
                    {
                        token = GenerateToken();
                        //return token;
                    }
                    return token;
                }

如何锁定令牌,基于asp.net中的时间

您应该在GenerateToken方法中使用以下内容

 DateTime dateTime = DateTime.UtcNow;
 dateTime = dateTime.AddSeconds(-dateTime.Second);
 if (dateTime.Minute % 2 != 0)
     dateTime = dateTime.AddMinutes(1);

这将产生偶数分钟的时间,这在2分钟的持续时间内是相同的。

更新

全代码

public string GenerateToken()
{
    MD5 md5 = System.Security.Cryptography.MD5.Create();
    DateTime dateTime = DateTime.UtcNow;
    dateTime = dateTime.AddSeconds(-dateTime.Second);
    if (dateTime.Minute % 2 != 0)
        dateTime = dateTime.AddMinutes(1);
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(dateTime.ToString());
    byte[] hash = md5.ComputeHash(inputBytes);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
        sb.Append(hash[i].ToString("X2"));
    }
    return sb.ToString();
}

您使用的是哈希,而您应该使用加密

哈希是单向的,但加密是双向的,即当您取回令牌时,您可以解密令牌以获得原始值,从而能够计算时差并检查时差是否大于2分钟。

您可以使用AES、3DES。。。