Pour générer un mot de passe à usage unique ou une URL d'identification unique

Un mot de passe à usage unique (OTP) est un mot de passe valable pour une seule session de connexion ou transaction sur un système informatique ou un autre appareil numérique. Pour plus de détails, reportez-vous ce . Algorithme Choisissez au hasard des caractères parmi toutes nos possibilités et générez-en une chaîne de la longueur souhaitée. Les OTP comportent généralement 6 à 7 caractères et le caractère aléatoire de 6 à 7 caractères garantit presque un moyen sécurisé de connexion.

Les OTP sont largement utilisés sur des sites Web tels que Facebook, Google Sign-in Wifi, l'accès à la connexion au portail des chemins de fer, etc.

Comment est-il généré ?

Eh bien, il est fort possible qu'ils utilisent le même algorithme pour générer un OTP. Si par hasard (très rare) la chaîne unique générée a déjà été générée auparavant et a été associée à un code différent alors une autre chaîne aléatoire est utilisée. À l'heure actuelle, il semble que seules six chaînes de caractères soient générées de manière aléatoire pour une identification unique de tous les codes. Un moment viendra où toutes les six chaînes de caractères possibles seront épuisées. Alors oui, même les éléments liés au Web reposent également fortement sur le hasard.

Probabilité de collision de deux OTP 

  • La longueur de l'OTP est de 6 et la taille définie de tous les caractères possibles dans l'OTP est de 62. Ainsi, le nombre total d'ensembles possibles de la paire d'OTP est 62 12 .
  • Certains d'entre eux sont - [{AAAAAAAAA} {AAAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • Mais les ensembles possibles de paires égales d’OTP sont : 62 6 . Certains d'entre eux sont - [{AAAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • D'où le probabilité de collision de deux OTP est : 62 6 / 62 12 = 1/62 6 = 1/56800235584 = 1,7605561 -11

Donc le probabilité La collision de deux OTP est aussi peu probable que l'existence de votre vie sur terre (Rapport du nombre d'années que vous vivrez au nombre d'années depuis le début de l'univers et de tout ce qui existe). Alors oui, les OTP sont bien plus sécurisés que les mots de passe statiques ! Mise en œuvre  

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   

Résultat (peut être différent pour chaque exécution) :

 Your OTP is - 8qOtzy  

Complexité temporelle : O(N) où N = nombre de caractères dans notre OTP Espace auxiliaire : Outre la chaîne contenant tous les caractères possibles, nous avons besoin d'un espace O(N) pour contenir l'OTP où N = nombre de caractères dans notre OTP. Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant écrire.geeksforgeeks.org ou envoyez votre article à [email protected]. Consultez votre article apparaissant sur la page principale de GeeksforGeeks et aidez les autres Geeks. Veuillez écrire des commentaires si vous trouvez quelque chose d'incorrect ou si vous souhaitez partager plus d'informations sur le sujet abordé ci-dessus.