Una contraseña de un solo uso (OTP) es una contraseña que es válida solo para una sesión de inicio de sesión o transacción en un sistema informático u otro dispositivo digital. Para más detalles consulte este . Algoritmo Elija caracteres aleatoriamente de todas nuestras posibilidades y genere una cadena de la longitud deseada a partir de ellos. Las OTP generalmente tienen entre 6 y 7 caracteres y la aleatoriedad en 6 a 7 caracteres casi garantiza una forma segura de iniciar sesión.
Las OTP se utilizan ampliamente en sitios web como Facebook, Google Sign-in Wifi, acceso al inicio de sesión del portal de ferrocarriles, etc.
¿Cómo se genera?
Bueno, es una gran posibilidad que utilicen el mismo algoritmo con el que se genera una OTP. Si por casualidad (muy raro) la cadena única generada ya se generó antes y se ha asociado con un código diferente, entonces se utiliza otra cadena aleatoria. Por ahora parece que sólo se generan aleatoriamente seis cadenas de caracteres para una identificación única de todos los códigos. Llegará un momento en que se agoten las seis cadenas de caracteres posibles. Entonces, sí, incluso las cosas relacionadas con la web también dependen en gran medida de la aleatoriedad.
Probabilidad de colisión de dos OTP
- La longitud de OTP es 6 y el tamaño establecido de todos los caracteres posibles en la OTP es 62. Por lo tanto, el número total de conjuntos posibles del par de OTP es 62 12 .
- Algunos de ellos son - [{AAAAAAAAA} {AAAAAAAAAAAAB} ..... {456789 456788} {456789 456789}]
- Pero los posibles conjuntos de pares iguales de OTP son: 62 6 . Algunos de ellos son - [{AAAAAAAAA} {AAAAAB AAAAAAB} ..... {456788 456788} {456789 456789}]
- De ahí el probabilidad de colisión de dos OTP es: 62 6 / 62 12 = 1/62 6 = 1/56800235584 = 1,7605561 -11
Entonces el probabilidad La colisión de dos OTP es tan menos probable como la existencia de su vida en la Tierra (relación entre la cantidad de años que vivirá y la cantidad de años desde el inicio del universo y todo lo que existe). Entonces, sí, ¡las OTP son mucho más seguras que las contraseñas estáticas! Implementación
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
Salida (puede ser diferente para cada ejecución):
Your OTP is - 8qOtzy
Complejidad del tiempo: O(N) donde N = número de caracteres en nuestra OTP Espacio Auxiliar: Además de que la cadena tenga todos los caracteres posibles, requerimos un espacio O(N) para contener la OTP, donde N = número de caracteres en nuestra OTP. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando escribir.geeksforgeeks.org o envíe su artículo por correo a [email protected]. Vea que su artículo aparezca en la página principal de GeeksforGeeks y ayude a otros Geeks. Por favor escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.