Еднократната парола (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 и помогнете на други отрепки. Моля, напишете коментари, ако намерите нещо неправилно или искате да споделите повече информация по темата, обсъдена по -горе.