Per generare una password monouso o un URL di identificazione univoco

Una password monouso (OTP) è una password valida per una sola sessione di accesso o transazione su un sistema informatico o altro dispositivo digitale. Per maggiori dettagli fare riferimento Questo . Algoritmo Scegli casualmente i caratteri tra tutte le nostre possibilità e genera da essi una stringa della lunghezza desiderata. Le OTP sono generalmente lunghe 6-7 caratteri e la casualità in 6-7 caratteri garantisce quasi un modo sicuro di accesso.

Gli OTP sono ampiamente utilizzati in siti Web come: Facebook Google Sign-in Wifi – accesso al portale delle ferrovie ecc.

Come viene generato?

Bene, è una grande possibilità che utilizzino lo stesso algoritmo quando viene generata una OTP. Se per caso (molto raro) la stringa univoca generata è già stata generata in precedenza ed è stata associata ad un codice diverso allora viene utilizzata un'altra stringa casuale. Per ora sembra che solo sei stringhe di caratteri vengano generate casualmente per un'identificazione univoca di tutti i codici. Verrà il momento in cui tutte le possibili stringhe di sei caratteri potrebbero essere esaurite. Quindi sì, anche le cose legate al web fanno molto affidamento sulla casualità.

Probabilità di collisione di due OTP 

  • La lunghezza dell'OTP è 6 e la dimensione impostata di tutti i possibili caratteri nell'OTP è 62. Quindi il numero totale di possibili insiemi della coppia di OTP è 62 12 .
  • Alcuni di loro sono: [{AAAAAAAAAA} {AAAAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • Ma i possibili insiemi di coppie uguali di OTP sono: 62 6 . Alcuni di essi sono: [{AAAAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • Quindi il probabilità di collisione di due OTP è: 62 6 /62 12 = 1/62 6 = 1/56800235584 = 1,7605561 -11

Quindi il probabilità di due OTP in collisione sono meno probabili quanto l'esistenza della tua vita sulla terra (rapporto tra il numero di anni che vivrai e il numero di anni dall'inizio dell'universo e di tutto ciò che esiste). Quindi sì, le OTP sono molto più sicure delle password statiche! Attuazione  

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   

Output (può essere diverso per ogni esecuzione):

 Your OTP is - 8qOtzy  

Complessità temporale: O(N) dove N = numero di caratteri nella nostra OTP Spazio ausiliario: A parte la stringa che contiene tutti i caratteri possibili, è necessario uno spazio O(N) per contenere l'OTP dove N = numero di caratteri nella nostra OTP. Se ti piace GeeksforGeeks e desideri contribuire puoi anche scrivere un articolo utilizzando write.geeksforgeeks.org oppure invia il tuo articolo via email a [email protected]. Guarda il tuo articolo apparire sulla pagina principale di GeeksforGeeks e aiuta altri Geeks. Per favore scrivi commenti se trovi qualcosa di sbagliato o vuoi condividere maggiori informazioni sull'argomento discusso sopra.