Guest User

One time passwords in C#

a guest
May 6th, 2016
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. private async void Form_Load(object sender, System.EventArgs e)
  2. {
  3. otp = new OneTimePassword(txtSecret.Text);
  4. tmrUpdate_Tick(null, null);
  5.  
  6. for (int timeStep = 30; timeStep < 200; timeStep++)
  7. {
  8. var secret = GetRandomSecretKey();
  9. var otpGenerator = new OneTimePassword(secret) { Algorithm = OneTimePasswordAlgorithm.Sha512, Digits = 6, TimeStep = timeStep };
  10. var sp = Stopwatch.StartNew();
  11. Debug.WriteLine($"TimeStep: {timeStep}, Key: {secret}, Started: {DateTime.Now.ToString("hh:mm:ss.fff")}");
  12. var code = otpGenerator.GetCode();
  13. var isCodeValid = true;
  14. while (isCodeValid)
  15. {
  16. await Task.Delay(1000);
  17. var otpVerfier = new OneTimePassword(secret) { Algorithm = OneTimePasswordAlgorithm.Sha512, Digits = 6, TimeStep = timeStep };
  18. isCodeValid = otpVerfier.IsCodeValid(code);
  19. var wrongResult = (sp.Elapsed.TotalSeconds > timeStep) && isCodeValid;
  20. Debug.WriteLine($"ValidCode: {isCodeValid}, {sp.Elapsed}{(wrongResult ? $", Not good {timeStep}" : "")}");
  21. }
  22.  
  23. Debug.WriteLine($"TimeStep: {timeStep}, Key: {secret}, Ended: {DateTime.Now.ToString("hh:mm:ss.fff")}");
  24. }
  25. }
  26.  
  27. Random _random = new Random();
  28. char GetRandomLetter()
  29. {
  30. // This method returns a random lowercase letter.
  31. // ... Between 'a' and 'z' inclusize.
  32. int num = _random.Next(0, 26); // Zero to 25
  33. char let = (char)('a' + num);
  34. return let;
  35. }
  36.  
  37. string GetRandomSecretKey()
  38. {
  39. var firstSet = new string(new char[] { GetRandomLetter(), GetRandomLetter(), GetRandomLetter(), GetRandomLetter() });
  40. var secondSet = new string(new char[] { GetRandomLetter(), GetRandomLetter(), GetRandomLetter(), GetRandomLetter() });
  41. var thridSet = new string(new char[] { GetRandomLetter(), GetRandomLetter(), GetRandomLetter(), GetRandomLetter() });
  42. var fourthSet = new string(new char[] { GetRandomLetter(), GetRandomLetter(), GetRandomLetter(), GetRandomLetter() });
  43. return string.Join(" ", firstSet, secondSet, thridSet, fourthSet);
  44. }
Add Comment
Please, Sign In to add comment