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.