logo

لإنشاء كلمة مرور لمرة واحدة أو عنوان 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(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 

الإخراج (قد يكون مختلفًا لكل عملية تشغيل):

Your OTP is - 8qOtzy

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