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 ( 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
Výstup (může se lišit pro každý běh):
Your OTP is - 8qOtzySlož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.