logo

Generovat jednorázové heslo nebo jedinečnou url identifikaci

Jednorázové heslo (OTP) je heslo, které je platné pouze pro jednu přihlašovací relaci nebo transakci v počítačovém systému nebo jiném digitálním zařízení. Další podrobnosti viz tento . Algoritmus Náhodně vyberte znaky z našich všech možností a generujte z ní řetězec požadované délky. OTP jsou obecně dlouhé 6-7 znaků a náhodnost u 6-7 znaků téměř zaručuje bezpečný způsob přihlášení.

OTP jsou široce používány na webových stránkách jako- Facebook Google přihlášení WiFi- přístup k přihlášení k železničnímu portálu atd.



Jak se to generuje?

Je to skvělá možnost, že používají stejný algoritmus jako OTP. Pokud je náhodou (velmi vzácný) jedinečný generovaný řetězec již vygenerován dříve a byl spojen s jiným kódem, použije se další náhodný řetězec. V současné době se zdá, že pro jedinečnou identifikaci všech kódů je generováno pouze šest řetězců znaků. Přijde čas, až se může vyčerpat všech možných šesti řetězců znaků. Takže ano, dokonce i výrobky související s webem se také silně spoléhají na náhodnost.

Pravděpodobnost kolize dvou OTP 



  • Délka OTP je 6 a velikost sady všech možných znaků v OTP je 62. Takže celkový počet možných sad páru OTPS je tedy 62 12 .
  • Někteří z nich jsou - [{aaaaaaaaaaaaa} {aaaaaaaaaaab} ..... {456789 456788} {456789 456789}]
  • Možné sady stejného páru OTP jsou však: 62 6 . Některé z nich jsou - [{aaaaaaaaaa} {aaaaab aaaaaab} ..... {456788 456788} {456789 456789}]
  • Proto pravděpodobnost kolize dvou OTP je: 62 6 / 62 12 = 1/62 6 = 1 /56800235584 = 1,7605561 -11

Takže pravděpodobnost Ze dvou kolizí OTP jsou stejně méně pravděpodobné jako existence vašeho života na Zemi (poměr počtu let, který budete žít až do počtu let od začátku vesmíru a všeho existujícího). Yesotps jsou mnohem bezpečnější než statická hesla! Implementace  

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 

Výstup (může se lišit pro každý běh):

Your OTP is - 8qOtzy

Složitost času: O (n) kde n = počet znaků v našem OTP Pomocný prostor: Kromě řetězce, který má všechny možné znaky, požadujeme O (n) prostor, abychom drželi OTP, kde n = počet znaků v našem OTP, pokud máte rádi geeksforgeeks a chtěli byste přispět, můžete také napsat článek pomocí write.geeksforgeeks.org nebo pošlete svůj článek na adresu [email protected]. Podívejte se na váš článek, který se objevuje na hlavní stránce Geeksforgeeks a pomozte ostatním geekům. Napište prosím komentáře, pokud zjistíte něco nesprávného nebo chcete sdílet více informací o tématu diskutovaném výše.