如何锁定令牌,基于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;
}
您应该在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。。。