Een eenmalig wachtwoord of unieke identificatie-URL genereren

Een eenmalig wachtwoord (OTP) is een wachtwoord dat slechts geldig is voor één inlogsessie of transactie op een computersysteem of ander digitaal apparaat. Voor meer details zie dit . Algoritme Kies willekeurig karakters uit al onze mogelijkheden en genereer hieruit een string van de gewenste lengte. OTP's zijn over het algemeen 6-7 tekens lang en de willekeur van 6-7 tekens garandeert bijna een veilige manier van inloggen.

OTP's worden veel gebruikt op websites zoals Facebook Google Sign-in Wifi – toegang tot Railways Portal Login enz.

Hoe wordt het gegenereerd?

Wel is de kans groot dat ze hetzelfde algoritme gebruiken als er een OTP wordt gegenereerd. Als de gegenereerde unieke string toevallig (zeer zeldzaam) al eerder is gegenereerd en aan een andere code is gekoppeld, wordt een andere willekeurige string gebruikt. Momenteel lijkt het erop dat er slechts zes tekenreeksen willekeurig worden gegenereerd voor een unieke identificatie van alle codes. Er zal een tijd komen dat alle mogelijke zes tekenreeksen uitgeput raken. Dus ja, zelfs de webgerelateerde dingen zijn ook sterk afhankelijk van willekeur.

Waarschijnlijkheid van een botsing van twee OTP's 

  • De lengte van OTP is 6 en de ingestelde grootte van alle mogelijke tekens in de OTP is 62. Het totale aantal mogelijke sets van het paar OTP's is dus 62 12 .
  • Sommigen daarvan zijn - [{AAAAAAAAAA} {AAAAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • Maar de mogelijke sets van gelijke paar OTP's zijn: 62 6 . Sommigen daarvan zijn - [{AAAAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • Vandaar de waarschijnlijkheid van een botsing van twee OTP's is: 62 6 / 62 12 = 1/62 6 = 1 / 56800235584 = 1,7605561 -11

Dus de waarschijnlijkheid van twee botsende OTP's is net zo minder waarschijnlijk als het bestaan ​​van je leven op aarde (de verhouding tussen het aantal jaren dat je zult leven en het aantal jaren vanaf het begin van het universum en alles wat bestaat). Dus ja, OTP's zijn veel veiliger dan statische wachtwoorden! Uitvoering  

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   

Uitvoer (kan voor elke run anders zijn):

 Your OTP is - 8qOtzy  

Tijdcomplexiteit: O(N) waarbij N = aantal tekens in onze OTP Hulpruimte: Behalve dat de string alle mogelijke tekens bevat, hebben we O(N)-spatie nodig om de OTP vast te houden, waarbij N = aantal tekens in onze OTP. Als je GeeksforGeeks leuk vindt en een bijdrage wilt leveren, kun je ook een artikel schrijven met schrijf.geeksforgeeks.org of mail uw artikel naar [email protected]. Zie uw artikel verschijnen op de hoofdpagina van GeeksforGeeks en help andere Geeks. Schrijf opmerkingen als u iets onjuist vindt of als u meer informatie wilt delen over het hierboven besproken onderwerp.