Tek Kullanımlık Şifre veya Benzersiz Kimlik URL'si Oluşturmak İçin

Tek kullanımlık şifre (OTP), bir bilgisayar sisteminde veya başka bir dijital cihazda yalnızca bir oturum açma oturumu veya işlemi için geçerli olan bir şifredir. Daha fazla ayrıntı için bkz. Bu . Algoritma Tüm olasılıklarımızdan rastgele karakterler seçin ve ondan istenen uzunlukta bir dize oluşturun. OTP'ler genellikle 6-7 karakter uzunluğundadır ve 6-7 karakterdeki rastgelelik, oturum açmanın neredeyse güvenli bir yolunu garanti eder.

OTP'ler, Facebook Google Oturum Açma Wifi - Demiryolları Portalı Girişine erişim vb. gibi web sitelerinde yaygın olarak kullanılmaktadır.

Nasıl oluşturulur?

OTP'nin oluşturulduğu algoritmanın aynısını kullanmaları büyük bir olasılık. Şans eseri (çok nadir), oluşturulan benzersiz dize daha önce oluşturulmuşsa ve farklı bir kodla ilişkilendirilmişse, başka bir rastgele dize kullanılır. Şu an itibariyle, tüm kodların benzersiz bir şekilde tanımlanması için yalnızca altı karakter dizisinin rastgele üretildiği görülmektedir. Olası altı karakter dizisinin tamamının tükenebileceği bir zaman gelecek. Yani evet, web ile ilgili şeyler bile büyük ölçüde rastgeleliğe dayanıyor.

Olasılık iki OTP'nin çarpışması 

  • OTP'nin uzunluğu 6'dır ve OTP'deki tüm olası karakterlerin ayarlanan boyutu 62'dir. Yani OTP çiftinin olası kümelerinin toplam sayısı şöyledir: 62 12 .
  • Bunlardan bazıları - [{AAAAAAAAA} {AAAAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • Ancak eşit OTP çiftinin olası kümeleri şunlardır: 62 6 . Bunlardan bazıları - [{AAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • Dolayısıyla olasılık iki OTP'nin çarpışması: 62 6 / 62 12 = 1/62 6 = 1 / 56800235584 = 1,7605561 -11

Yani olasılık İki OTP'nin çarpışması, dünyadaki yaşamınızın varlığı kadar daha az olasıdır (Yaşayacağınız yıl sayısının, evrenin başlangıcından itibaren geçen yıl sayısına ve var olan her şeye oranı). Yani yesOTP'ler statik şifrelerden çok daha güvenlidir! Uygulama  

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   

Çıktı (Her çalıştırmada farklı olabilir):

 Your OTP is - 8qOtzy  

Zaman Karmaşıklığı: O(N) burada N = OTP'deki karakter sayısı Yardımcı Alan: Tüm olası karakterleri içeren dizenin yanı sıra, OTP'yi tutmak için O(N) alanına ihtiyacımız var; burada N = OTP'mizdeki karakter sayısı   GeeksforGeeks'i seviyorsanız ve katkıda bulunmak istiyorsanız şunu kullanarak da bir makale yazabilirsiniz: write.geeksforgeeks.org veya makalenizi [email protected] adresine gönderin. Makalenizin GeeksforGeeks ana sayfasında görünmesini sağlayın ve diğer Geek'lere yardımcı olun. Yanlış bir şey bulursanız veya yukarıda tartışılan konu hakkında daha fazla bilgi paylaşmak istiyorsanız lütfen yorum yazın.