כדי ליצור סיסמא חד פעמית או כתובת אתר זיהוי ייחודית

סיסמא חד פעמית (OTP) היא סיסמא שתקפה להפעלה או עסקה כניסה אחת בלבד במערכת מחשב או במכשיר דיגיטלי אחר. לפרטים נוספים עיין זֶה ו אַלגוֹרִיתְם בחר באופן אקראי תווים מכל האפשרויות שלנו ויצר מחרוזת באורך הרצוי ממנה. OTPs בדרך כלל באורך 6-7 תווים ואקראיות ב 6-7 תווים כמעט מבטיחה דרך בטוחה להיכנס.

OTPs נמצאים בשימוש נרחב באתרים כמו- פייסבוק כניסה של Google WiFi- גישה לכניסה לפורטל רכבות וכו '.

איך זה נוצר?

ובכן זו אפשרות נהדרת שהם משתמשים באותו אלגוריתם כמו נוצר OTP. אם במקרה (נדיר מאוד) המחרוזת הייחודית שנוצרה כבר נוצרה לפני כן והיא הייתה משויכת לקוד אחר, משתמשים במחרוזת אקראית נוספת. לפי עתה נראה שרק שישה מיתרי תווים נוצרים באופן אקראי לזיהוי ייחודי של כל הקודים. יגיע זמן בו כל ששת מיתרי הדמות האפשריים עשויים להיות מותשים. אז כן, אפילו החומרים הקשורים לאינטרנט מסתמכים מאוד על אקראיות.

הִסתַבְּרוּת התנגשות של שני OTP 

  • אורך ה- OTP הוא 6 וגודל הסט של כל התווים האפשריים ב- OTP הוא 62. כך המספר הכולל של הסטים האפשריים של צמד ה- OTPs הם 62 12 ו
  • חלקם הם - [{aaaaaaaaa} {aaaaaaaaaaaab} ..... {456789 456788} {456789 456789}]
  • אבל הסטים האפשריים של זוג OTPs שווים הם: 62 6 ו חלקם הם - [{aaaaaaaaa} {aaaaab aaaaaab} ..... {456788 456788} {456789 456789}]
  • מכאן הִסתַבְּרוּת התנגשות של שני OTPs היא: 62 6 / 62 12 = 1/62 6 = 1 /56800235584 = 1.7605561 -11

אז הִסתַבְּרוּת מבין שני OTPs התנגשות הם פחות סבירים כמו קיומם של חייך על פני האדמה (יחס מספר השנים שתחיה למספר השנים מתחילת היקום וכל מה שקיים). יישום  

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   

פלט (עשוי להיות שונה לכל ריצה):

 Your OTP is - 8qOtzy  

מורכבות זמן: O (n) כאשר n = מספר תווים ב- OTP שלנו שטח עזר: מלבד המחרוזת שיש להן את כל התווים האפשריים אנו דורשים שטח O (n) כדי להחזיק את ה- OTP כאשר n = מספר תווים ב- OTP שלנו אם אתה רוצה Geeksforgeeks ורוצה לתרום אתה יכול גם לכתוב מאמר באמצעות write.geeksforgeeks.org או שלחו את המאמר שלך ל- [email protected]. עיין במאמר שלך המופיע בדף הראשי של GeeksForgeeks ועזור לחנונים אחרים. אנא כתוב הערות אם אתה מוצא משהו שגוי או שאתה רוצה לשתף מידע נוסף על הנושא שנדון לעיל.