Generovat jednorázové heslo nebo jedinečnou url identifikaci

Jednorázové heslo (OTP) je heslo, které je platné pouze pro jednu přihlašovací relaci nebo transakci v počítačovém systému nebo jiném digitálním zařízení. Další podrobnosti viz tento . Algoritmus Náhodně vyberte znaky z našich všech možností a generujte z ní řetězec požadované délky. OTP jsou obecně dlouhé 6-7 znaků a náhodnost u 6-7 znaků téměř zaručuje bezpečný způsob přihlášení.

OTP jsou široce používány na webových stránkách jako- Facebook Google přihlášení WiFi- přístup k přihlášení k železničnímu portálu atd.

Jak se to generuje?

Je to skvělá možnost, že používají stejný algoritmus jako OTP. Pokud je náhodou (velmi vzácný) jedinečný generovaný řetězec již vygenerován dříve a byl spojen s jiným kódem, použije se další náhodný řetězec. V současné době se zdá, že pro jedinečnou identifikaci všech kódů je generováno pouze šest řetězců znaků. Přijde čas, až se může vyčerpat všech možných šesti řetězců znaků. Takže ano, dokonce i výrobky související s webem se také silně spoléhají na náhodnost.

Pravděpodobnost kolize dvou OTP 

  • Délka OTP je 6 a velikost sady všech možných znaků v OTP je 62. Takže celkový počet možných sad páru OTPS je tedy 62 12 .
  • Někteří z nich jsou - [{aaaaaaaaaaaaa} {aaaaaaaaaaab} ..... {456789 456788} {456789 456789}]
  • Možné sady stejného páru OTP jsou však: 62 6 . Některé z nich jsou - [{aaaaaaaaaa} {aaaaab aaaaaab} ..... {456788 456788} {456789 456789}]
  • Proto pravděpodobnost kolize dvou OTP je: 62 6 / 62 12 = 1/62 6 = 1 /56800235584 = 1,7605561 -11

Takže pravděpodobnost Ze dvou kolizí OTP jsou stejně méně pravděpodobné jako existence vašeho života na Zemi (poměr počtu let, který budete žít až do počtu let od začátku vesmíru a všeho existujícího). Yesotps jsou mnohem bezpečnější než statická hesla! Implementace  

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 se lišit pro každý běh):

 Your OTP is - 8qOtzy  

Složitost času: O (n) kde n = počet znaků v našem OTP Pomocný prostor: Kromě řetězce, který má všechny možné znaky, požadujeme O (n) prostor, abychom drželi OTP, kde n = počet znaků v našem OTP, pokud máte rádi geeksforgeeks a chtěli byste přispět, můžete také napsat článek pomocí write.geeksforgeeks.org nebo pošlete svůj článek na adresu [email protected]. Podívejte se na váš článek, který se objevuje na hlavní stránce Geeksforgeeks a pomozte ostatním geekům. Napište prosím komentáře, pokud zjistíte něco nesprávného nebo chcete sdílet více informací o tématu diskutovaném výše.