Aby wygenerować hasło jednorazowe lub unikalny adres URL identyfikacyjny

Hasło jednorazowe (OTP) to hasło ważne tylko podczas jednej sesji logowania lub transakcji w systemie komputerowym lub innym urządzeniu cyfrowym. Więcej szczegółów znajdziesz Ten . Algorytm Losowo wybierz znaki ze wszystkich naszych możliwości i wygeneruj z nich ciąg o żądanej długości. OTP mają zazwyczaj długość 6-7 znaków, a losowość 6-7 znaków niemal gwarantuje bezpieczny sposób logowania.

OTP są szeroko stosowane w witrynach takich jak Facebook Google Logowanie Wi-Fi – dostęp do logowania do portalu kolei itp.

Jak jest generowany?

Cóż, jest duża możliwość, że używają tego samego algorytmu, co generowane jest hasło jednorazowe. Jeśli przez przypadek (bardzo rzadko) wygenerowany unikalny ciąg znaków został już wygenerowany wcześniej i został powiązany z innym kodem, wówczas używany jest inny losowy ciąg. Obecnie wydaje się, że losowo generowanych jest tylko sześć ciągów znaków w celu jednoznacznej identyfikacji wszystkich kodów. Nadejdzie czas, kiedy wszystkie możliwe sześć ciągów znaków może się wyczerpać. Więc tak, nawet rzeczy związane z siecią również w dużym stopniu opierają się na losowości.

Prawdopodobieństwo kolizji dwóch OTP 

  • Długość OTP wynosi 6, a ustawiony rozmiar wszystkich możliwych znaków w OTP wynosi 62. Zatem całkowita liczba możliwych zestawów pary OTP wynosi 62 12 .
  • Niektóre z nich to - [{AAAAAAAAA} {AAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • Ale możliwe zestawy równych par OTP to: 62 6 . Niektóre z nich to - [{AAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • Stąd prawdopodobieństwo kolizji dwóch OTP wynosi: 62 6 / 62 12 = 1/62 6 = 1 / 56800235584 = 1,7605561 -11

Więc prawdopodobieństwo zderzenie dwóch haseł OTP jest tak samo mniej prawdopodobne, jak istnienie twojego życia na ziemi (stosunek liczby lat, które przeżyjesz, do liczby lat od początku wszechświata i wszystkiego, co istnieje). Zatem tak, hasła OTP są znacznie bezpieczniejsze niż hasła statyczne! Realizacja  

CPP
   // A C/C++ Program to generate OTP (One Time Password)   #include       using     namespace     std  ;   // A Function to generate a unique OTP everytime   string     generateOTP  (  int     len  )   {      // All possible characters of my OTP      string     str     =     'abcdefghijklmnopqrstuvwxyzABCD'      'EFGHIJKLMNOPQRSTUVWXYZ0123456789'  ;      int     n     =     str  .  length  ();      // String to hold my OTP      string     OTP  ;      for     (  int     i  =  1  ;     i   <=  len  ;     i  ++  )      OTP  .  push_back  (  str  [  rand  ()     %     n  ]);      return  (  OTP  );   }   // Driver Program to test above functions   int     main  ()   {      // For different values each time we run the code      srand  (  time  (  NULL  ));      // Declare the length of OTP      int     len     =     6  ;      printf  (  'Your OTP is - %s'       generateOTP  (  len  ).  c_str  ());      return  (  0  );   }   
Java
   // A Java Program to generate OTP (One Time Password)   class   GFG  {   // A Function to generate a unique OTP everytime   static     String     generateOTP  (  int     len  )   {      // All possible characters of my OTP      String     str     =     'abcdefghijklmnopqrstuvwxyzABCD'      +  'EFGHIJKLMNOPQRSTUVWXYZ0123456789'  ;      int     n     =     str  .  length  ();      // String to hold my OTP      String     OTP  =  ''  ;      for     (  int     i     =     1  ;     i      <=     len  ;     i  ++  )      OTP     +=     (  str  .  charAt  ((  int  )     ((  Math  .  random  ()  *  10  )     %     n  )));      return  (  OTP  );   }   // Driver code   public     static     void     main  (  String  []     args  )   {      // Declare the length of OTP      int     len     =     6  ;      System  .  out  .  printf  (  'Your OTP is - %s'       generateOTP  (  len  ));   }   }   // This code is contributed by PrinciRaj1992   
Python
   # A Python3 Program to generate OTP (One Time Password)   import   random   # A Function to generate a unique OTP everytime   def   generateOTP  (  length  ):   # All possible characters of my OTP   str   =   'abcdefghijklmnopqrstuvwxyzAB      CDEFGHIJKLMNOPQRSTUVWXYZ0123456789'  ;   n   =   len  (  str  );   # String to hold my OTP   OTP   =   ''  ;   for   i   in   range  (  1    length  +  1  ):   OTP   +=   str  [  int  (  random  .  random  ()  *  10  )   %   n  ];   return   (  OTP  );   # Driver code   if   __name__   ==   '__main__'  :   # Declare the length of OTP   length   =   6  ;   print  (  'Your OTP is - '     generateOTP  (  length  ));   # This code contributed by Rajput-Ji   
C#
   // A C# Program to generate OTP (One Time Password)   using     System  ;   class     GFG     {      // A Function to generate a unique OTP everytime      static     string     generateOTP  (  int     len  )      {      // All possible characters of my OTP      string     str     =     'abcdefghijklmnopqrstuvwxyzABCD'      +     'EFGHIJKLMNOPQRSTUVWXYZ0123456789'  ;      int     n     =     str  .  Length  ;      // Creating a new Random object      Random     rand     =     new     Random  ();      // String to hold my OTP      string     OTP     =     ''  ;      for     (  int     i     =     1  ;     i      <=     len  ;     i  ++  )      OTP     +=     (  str  [((  int  )((  rand  .  Next  ()     *     10  )     %     n  ))]);      return     (  OTP  );      }      // Driver code      public     static     void     Main  (  string  []     args  )      {      // Declare the length of OTP      int     len     =     6  ;      Console  .  WriteLine  (  'Your OTP is - '      +     generateOTP  (  len  ));      }   }   // This code is contributed by phasing17   
JavaScript
   // JavaScript Program to generate OTP (One Time Password)   // A Function to generate a unique OTP everytime   function     generateOTP  (  length  )   {      // All possible characters of my OTP      let     str     =     'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'  ;      let     n     =     str  .  length  ;      // String to hold my OTP      let     OTP     =     ''  ;      for     (  var     i     =     1  ;     i      <=     length  ;     i  ++  )      OTP     +=     str  [(  Math  .  floor  (  Math  .  random  ()     *     10  )     %     n  )];      return     (  OTP  );   }   // Driver code   // Declare the length of OTP   let     length     =     6  ;   console  .  log  (  'Your OTP is - '       generateOTP  (  length  ));   // This code is contributed by phasing17   

Dane wyjściowe (mogą być inne dla każdego przebiegu):

 Your OTP is - 8qOtzy  

Złożoność czasowa: O(N) gdzie N = liczba znaków w naszym OTP Przestrzeń pomocnicza: Oprócz ciągu zawierającego wszystkie możliwe znaki potrzebujemy miejsca O(N) do przechowywania hasła jednorazowego, gdzie N = liczba znaków w naszym OTP. Jeśli podoba Ci się GeeksforGeeks i chciałbyś wnieść swój wkład, możesz również napisać artykuł za pomocą write.geeksforgeeks.org lub wyślij swój artykuł na adres [email protected]. Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym Geekom. Napisz komentarz, jeśli znajdziesz coś nieprawidłowego lub chcesz podzielić się więcej informacjami na temat omówiony powyżej.