Para gerar uma senha de uso único ou URL de identificação exclusivo

Uma senha de uso único (OTP) é uma senha válida para apenas uma sessão de login ou transação em um sistema de computador ou outro dispositivo digital. Para mais detalhes consulte esse . Algoritmo Escolha aleatoriamente caracteres de todas as nossas possibilidades e gere uma string com o comprimento desejado a partir deles. Os OTPs geralmente têm de 6 a 7 caracteres e a aleatoriedade de 6 a 7 caracteres quase garante uma forma segura de login.

OTPs são amplamente utilizados em sites como Facebook Google Sign-in Wifi – acessando Railways Portal Login etc.

Como ele é gerado?

Bem, é uma grande possibilidade que eles usem o mesmo algoritmo em que um OTP é gerado. Se por acaso (muito raro) a string única gerada já tiver sido gerada antes e tiver sido associada a um código diferente, então outra string aleatória será usada. No momento, parece que apenas seis sequências de caracteres são geradas aleatoriamente para uma identificação única de todos os códigos. Chegará um momento em que todas as seis sequências de caracteres possíveis poderão se esgotar. Então, sim, mesmo as coisas relacionadas à web também dependem fortemente da aleatoriedade.

Probabilidade de colisão de dois OTPs 

  • O comprimento do OTP é 6 e o ​​tamanho do conjunto de todos os caracteres possíveis no OTP é 62. Portanto, o número total de conjuntos possíveis do par de OTPs é 62 12 .
  • Alguns deles são - [{AAAAAAAAA} {AAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • Mas os possíveis conjuntos de pares iguais de OTPs são: 62 6 . Alguns deles são - [{AAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • Daí o probabilidade de colisão de dois OTPs é: 62 6 / 62 12 = 1/62 6 = 1/56800235584 = 1,7605561 -11

Então o probabilidade de dois OTPs colidindo são tão menos prováveis ​​quanto a existência de sua vida na Terra (proporção entre o número de anos que você viverá e o número de anos desde o início do universo e tudo o que existe). Então, sim, os OTPs são muito mais seguros do que senhas estáticas! Implementação  

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   

Saída (pode ser diferente para cada execução):

 Your OTP is - 8qOtzy  

Complexidade de tempo: O(N) onde N = número de caracteres em nosso OTP Espaço Auxiliar: Além da string ter todos os caracteres possíveis, precisamos de espaço O(N) para armazenar o OTP, onde N = número de caracteres em nosso OTP. Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando escreva.geeksforgeeks.org ou envie seu artigo para [email protected]. Veja seu artigo aparecendo na página principal do GeeksforGeeks e ajude outros Geeks. Por favor, escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.