Para generar una contraseña de un solo uso o una URL de identificación única

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *