لإنشاء كلمة مرور لمرة واحدة أو عنوان URL لتعريف فريد

كلمة المرور لمرة واحدة (OTP) هي كلمة مرور صالحة لجلسة تسجيل دخول واحدة أو معاملة واحدة فقط على نظام كمبيوتر أو أي جهاز رقمي آخر. لمزيد من التفاصيل راجع هذا . خوارزمية قم باختيار الأحرف بشكل عشوائي من جميع الاحتمالات المتاحة لدينا وقم بإنشاء سلسلة بالطول المطلوب منها. تتكون كلمات المرور لمرة واحدة بشكل عام من 6 إلى 7 أحرف، والعشوائية التي تتكون من 6 إلى 7 أحرف تضمن تقريبًا طريقة آمنة لتسجيل الدخول.

تُستخدم OTPs على نطاق واسع في مواقع الويب مثل - Facebook Google Sign-in Wifi - الوصول إلى تسجيل الدخول إلى بوابة السكك الحديدية وما إلى ذلك.

كيف يتم توليدها؟

حسنًا، هناك احتمال كبير أنهم يستخدمون نفس الخوارزمية التي يتم بها إنشاء كلمة مرور لمرة واحدة (OTP). إذا تم إنشاء السلسلة الفريدة التي تم إنشاؤها من قبل عن طريق الصدفة (نادر جدًا) وتم ربطها برمز مختلف، فسيتم استخدام سلسلة عشوائية أخرى. يبدو الآن أنه يتم إنشاء ستة سلاسل أحرف فقط بشكل عشوائي من أجل تعريف فريد لجميع الرموز. سيأتي وقت قد يتم فيه استنفاد جميع سلاسل الأحرف الستة المحتملة. لذلك، نعم، حتى المواد المتعلقة بالويب تعتمد أيضًا بشكل كبير على العشوائية.

احتمال من تصادم اثنين من OTPs 

  • يبلغ طول كلمة المرور لمرة واحدة (OTP) 6 وحجم المجموعة لجميع الأحرف الممكنة في كلمة المرور لمرة واحدة (OTP) هو 62. لذا فإن إجمالي عدد المجموعات المحتملة لزوج كلمات المرور لمرة واحدة (OTP) هو 62 12 .
  • ومنهم - [{AAAAAAAAAA} {AAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
  • لكن المجموعات المحتملة من الزوج المتساوي من OTPs هي: 62 6 . ومنهم - [{AAAAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
  • ومن هنا احتمال تصادم اثنين من OTPs هو: 62 6 / 62 12 = 1/62 6 = 1 / 56800235584 = 1.7605561 -11

لذلك احتمال إن تصادم اثنين من OTPs أقل احتمالًا مثل وجود حياتك على الأرض (نسبة عدد السنوات التي ستعيشها إلى عدد السنوات منذ بداية الكون وكل شيء في الوجود). لذا فإن نعم 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) للاحتفاظ بكلمة المرور لمرة واحدة حيث N = عدد الأحرف في كلمة المرور لمرة واحدة لدينا   إذا كنت تحب GeeksforGeeks وترغب في المساهمة، يمكنك أيضًا كتابة مقال باستخدام write.geeksforgeeks.org أو أرسل مقالتك بالبريد إلى [email protected]. شاهد مقالتك التي تظهر على صفحة GeeksforGeeks الرئيسية وساعد المهوسون الآخرين. يرجى كتابة التعليقات إذا وجدت أي شيء غير صحيح أو كنت ترغب في مشاركة المزيد من المعلومات حول الموضوع الذي تمت مناقشته أعلاه.