Generovať jednorazové heslo alebo jedinečnú adresu URL identifikácie

Jednorazové heslo (OTP) je heslo, ktoré je platné iba pre jednu prihlasovaciu reláciu alebo transakciu v počítačovom systéme alebo inom digitálnom zariadení. Viac informácií nájdete tak . Algoritmus Náhodne vyberte znaky z našich všetkých možností a vygenerujte z nej reťazec požadovanej dĺžky. OTP sú zvyčajne dlhé 6 až 7 znakov a náhodnosť v 6-7 znakoch takmer zaručuje bezpečný spôsob prihlásenia.

OTP sa bežne používajú na webových stránkach, ako je- Facebook Google Prihláste sa Wi-Fi- prístup k prihláseniu na portál železníc atď.

Ako sa generuje?

Je to skvelá možnosť, že používajú rovnaký algoritmus ako generovaný OTP. Ak je náhodou (veľmi zriedkavý) generovaný jedinečný reťazec už bol vygenerovaný predtým a bol spojený s iným kódom, potom sa používa ďalší náhodný reťazec. Podľa teraz sa zdá, že náhodne sa generuje iba šesť znakových reťazcov pre jedinečnú identifikáciu všetkých kódov. Prichádza čas, keď sa všetky možné šesť znakových reťazcov môžu vyčerpať. Takže áno, dokonca aj výrobky súvisiace s webom tiež silne spoliehajú na náhodnosť.

Pravdepodobnosť zrážky dvoch OTP 

  • Dĺžka OTP je 6 a nastavená veľkosť všetkých možných znakov v OTP je 62. Takže celkový počet možných množín páru OTPS je 62 12 .
  • Niektoré z nich sú - [{aaaaaaaa} {aaaaaaaaaaaab} ..... {456789 456788} {456789 456789}]
  • Ale možné sady rovnakých párov OTP sú: 62 6 . Niektoré z nich sú - [{aaaaaaaaa} {aaaaab aaaaaab} ..... {456788 456788} {456789 456789}]
  • Preto pravdepodobnosť zrážky dvoch OTPS je: 62 6 / 62 12 = 1/62 6 = 1/56800235584 = 1,7605561 -11

Tak pravdepodobnosť Dva zrážky OTP sú také menej pravdepodobné ako existencia vášho života na Zemi (pomer počtu rokov, ktoré budete žiť podľa počtu rokov od začiatku vesmíru a všetkého, čo existuje). Takže YesOtps sú oveľa bezpečnejšie ako statické heslá! Implementácia  

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   

Výstup (môže sa líšiť pre každý beh):

 Your OTP is - 8qOtzy  

Časová zložitosť: O (n) kde n = počet znakov v našom OTP Pomocný priestor: Okrem reťazca, ktorý má všetky možné znaky, potrebujeme O (n) priestor na držanie OTP, kde n = počet znakov v našom OTP, ak máte radi geeksforgeeks a chceli by ste prispieť, môžete tiež napísať článok pomocou článku write.geeksforgeeks.org Alebo pošlite svoj článok na recenziu [email protected]. Pozrite si svoj článok, ktorý sa objaví na hlavnej stránke GeeksforGeeks a pomáhajte iným geekom. Prosím, napíšte komentáre, ak zistíte, že niečo nesprávne alebo chcete zdieľať viac informácií o téme diskutovanej vyššie.