logo

За генериране на еднократна парола или уникален URL за идентификация

Еднократната парола (OTP) е парола, която е валидна само за една сесия за вход или транзакция на компютърна система или друго цифрово устройство. За повече подробности се отнасят това . Алгоритъм Изберете на случаен принцип от всички нашите възможности и генерирайте низ от желаната дължина от него. OTPs обикновено са с дължина 6-7 знака и случайността в 6-7 знака почти гарантира сигурен начин за влизане.

OTP се използват широко в уебсайтове като- Facebook Google вход Wifi- Достъп до портал за железопътни портали и т.н.

q3 месеца

Как се генерира?



Е, голяма възможност е те да използват същия алгоритъм, както се генерира OTP. Ако случайно (много рядко) генерира уникалния низ вече е генериран преди и е свързан с различен код, тогава се използва друг случаен низ. Съгласно сега изглежда, че само шест низа на знака се генерират на случаен принцип за уникална идентификация на всички кодове. Време ще дойде, когато всички възможни шест символни низове могат да се изчерпят. Така че да, дори и подобрените в мрежата неща също силно разчитат на случайността.

Вероятност на сблъсък на две OTP 

  • Дължината на OTP е 6, а определеният размер на всички възможни знаци в OTP е 62. Така че общият брой възможни набори от двойката OTP са 62 12 .
  • Някои от тях са - [{aaaaaaaaa} {aaaaaaaaaaab} ..... {456789 456788} {456789 456789}]
  • Но възможните набори от равна двойка OTP са: 62 6 . Някои от тях са - [{aaaaaaaaa} {aaaaab aaaaaab} ..... {456788 456788} {456789 456789}]
  • Оттук и вероятност на сблъсък на два OTP е: 62 6 / 62 12 = 1/62 6 = 1/56800235584 = 1.7605561 -11

Така че вероятност От две сблъсъци на OTPs са толкова по -малко вероятни, колкото съществуването на вашия живот на Земята (съотношение на броя на годините, в които ще живеете до броя на годините от началото на Вселената и всичко съществуващо). Така че YSOTPs са много по -сигурни от статичните пароли! Изпълнение  

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) пространство, за да държим OTP, където n = брой знаци в нашия OTP, ако харесвате Geeksforgeeks и искате да допринесете, можете също да напишете статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия, използвайки статия write.geeksforgeeks.org Или изпратете статията си на прегледа[email protected]. Вижте вашата статия, появяваща се на основната страница на Geeksforgeeks и помогнете на други отрепки. Моля, напишете коментари, ако намерите нещо неправилно или искате да споделите повече информация по темата, обсъдена по -горе.