2012-04-04 11 views
1

Verwenden Sie das folgende Programm zum Generieren des Tokens, basierend auf der Zeit (aktuelle Zeit). Es war ordnungsgemäß funktionieren. Es bedeutet, dass das Token generiert wird.Wie sperrt man das Token, basierend auf der Zeit in asp.net?

  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(); 
      } 

Und ich folgendes Programm für try zu sperren (verfallen), um die Token mit in 2 minutes.It bedeutet, dass ich die GetToken() method zuzugreifen, wird er das Token für particular Time(current Time) .Ich zurückkehren muß gültige Zeit 2 Minuten einzustellen für dieses token.Incase ich auf die getToken() vor 2 Minuten zugreifen Ich muss das gleiche Token.Aber ich auf die getToken() nach den 2 Minuten brauche ich neues Token bekommen. Wie kann ich das tun? Wie sperre ich das Token?

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

Antwort

2

Sie sollten

in gene Methode so etwas wie unten verwenden
DateTime dateTime = DateTime.UtcNow; 
dateTime = dateTime.AddSeconds(-dateTime.Second); 
if (dateTime.Minute % 2 != 0) 
    dateTime = dateTime.AddMinutes(1); 

Dies wird einige Zeit mit noch Minuten erzeugen, die für 2 Minuten Dauer gleich ist.

UPDATE

Voll-Code

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(); 
} 
+0

Ich versuche, das Token in GetToken zu sperren() – user

+0

Keine Notwendigkeit, eine Sperre zu erwerben. Ändern Sie Ihre GenerateToken-Methode, um das dateTime wie oben gezeigt zu verwenden. Was es tun würde, ist, dass sich die DateTime einmal in zwei Minuten ändert und nicht jede Sekunde/Minute. – Ramesh

+0

kann man den GenerateToken() Code bearbeiten und zurück posten, da ich nicht in der Lage bin, Ihren Standpunkt zu verstehen. – user

0

Sie verwenden Hashing, während Sie Verschlüsselung verwenden sollten.

Hashing ist unidirektional, Verschlüsselung erfolgt jedoch in zwei Richtungen, d. H. Wenn Sie das Token zurückerhalten, können Sie das Token entschlüsseln, um den ursprünglichen Wert zu erhalten, um den Zeitunterschied zu berechnen und zu überprüfen, ob es> 2 Minuten ist.

Sie können AES verwenden, 3DES, ...

+0

Verschlüsselung und Hashing verwendet das Token nur dann zu erzeugen .correct?, Wie es die Sperre der Token verwandt war? – user

+0

Ihre Sperrimplementierung ist nicht praktikabel - das Design muss sich ändern. Meine Antwort beantwortet Ihre Frage vielleicht nicht, aber ich versuche, Sie in die richtige Richtung zu lenken. – Aliostad