1

時間(現在の時間)に基づいてトークンを生成するために次のプログラムを使用しています。正常に動作しました。トークンが生成されることを意味します。

         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 分前に同じトークンを取得する必要があります。しかしgetToken()、2 分後に新しいトークンを取得する必要があります。これを行うにはどうすればよいですか?トークンをロックするにはどうすればよいですか?

     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;
                }
4

2 に答える 2

2

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();
}
于 2012-04-04T12:11:27.980 に答える
0

暗号化を使用する必要がありますが、ハッシュを使用しています。

ハッシュは一方向ですが、暗号化は双方向です。つまり、トークンを取得したら、トークンを復号化して元の値を取得し、時間差を計算して 2 分以上かどうかを確認できます。

AES、3DES などを使用できます。

于 2012-04-04T12:00:16.583 に答える