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 esto . Algoritmo Elija aleatoriamente caracteres de todas nuestras posibilidades y genere una string de la longitud deseada a partir de ella. Las OTP generalmente tienen entre 6 y 7 caracteres y la aleatoriedad en 6 o 7 caracteres casi garantiza una forma segura de iniciar sesión. Aplicaciones
- Las OTP se utilizan ampliamente en sitios web como Facebook, inicio de sesión de Google, acceso a Wi-Fi, inicio de sesión en el portal de ferrocarriles, etc.
- Incluso el IDE de GeeksforGeeks tiene una string única para todos los códigos compilados a través de él. Por ejemplo, https://ide.geeksforgeeks.org/Ks84Ck tiene la string única: «Ks84Ck» al final, que es única solo para este código.
¿Cómo se genera? Bueno, es una gran posibilidad que usen el mismo algoritmo que se genera una OTP. Si por casualidad (muy raro) la string única generada ya se generó antes y se asoció con un código diferente, entonces se usa otra string aleatoria. Por ahora, parece que solo se generan aleatoriamente seis strings de caracteres para una identificación única de todos los códigos. Llegará un momento en que se agotarán todas las posibles strings de seis caracteres. 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 la OTP es 6 y el tamaño del conjunto 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: [{aaaaaa, aaaaaa}, {aaaaaa, aaaaab},…..{456789, 456788}, {456789, 456789}]
- Pero los posibles conjuntos de pares iguales de OTP son: 62 6 . Algunos de ellos son: [{aaaaaa, aaaaaa}, {aaaaab, aaaaab},…..{456788, 456788}, {456789, 456789}]
- Por lo tanto, la probabilidad de colisión de dos OTP es: 62 6 / 62 12 = 1 / 62 6 = 1 / 56800235584 = 1.7605561 -11
Entonces, la probabilidad de que dos OTP colisionen es tan menos probable como la existencia de tu vida en la tierra (relación entre la cantidad de años que vivirás y la cantidad de años desde el comienzo del universo y todo lo que existe). Entonces, sí, 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<bits/stdc++.h> 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
Python3
# 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
Salida (puede ser diferente para cada ejecución):
Your OTP is - 8qOtzy
Complejidad de tiempo: O(N), donde N = número de caracteres en nuestra OTP Espacio auxiliar: Además de que la string tenga todos los caracteres posibles, requerimos espacio O(N) para contener la OTP, donde N = número de caracteres en nuestra OTP. el artículo es aportado por Rachit Belwariar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA