logo

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(1length+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.