Generador aleatorio de contraseñas

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

Un generador aleatorio de contraseña es un programa o un dispositivo hardware que toma entrada de un generador numerico aleatorio o pseudo-aleatorio y automáticamente genera una contraseña. La contraseñas aleatorias pueden ser generadas manualmente, usando fuentes de aleatoriedad como dados o monedas, o bien generadas usando un ordenador.

Aunque haya varios ejemplo de generadores de contraseña "aleatoria" en Internet, normalmente hay truco detrás, pues muchos programas imitan una aleatoriedad con una seguridad bastante débil. Una recomendación bastante común es la de usar herramientas de código abierto donde sea posible, ya que permiten comprobaciones independientes de la calidad de los métodos usados. Darse cuenta que el generar una contraseña aleatoria no asegura que esta tenga una fuerte seguridad, porque, aunque poco probable, se puede generar una contraseña que se pueda hackear con facilidad. En realidad, no hay necesidad de que una contraseña se genere por un proceso perfecto de generación: Simplemente tiene que ser difícil de adivinar.

Ejemplos en distintos lenguajes de programación[editar]

C[editar]

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
    /* Longitud de la contraseña */
    unsigned short int length = 8;

    /* La fuente del numero aleatorio rand() */
    srand((unsigned int) time(0) + getpid());

    /* ASCII characters 33 to 126 */
    while(length--) {
        putchar(rand() % 94 + 33);
        srand(rand());
    }

    printf("\n");

    return EXIT_SUCCESS;
}

PHP[editar]

function pass_gen($length = 8) {
    $pass = array();
    for ($i = 0; $i < $length; $i++) {
        $pass[] = chr(mt_rand(32, 126));
    }
    return implode($pass);
}


Java[editar]

String[] symbols = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
int length = 10;
Random random = SecureRandom.getInstanceStrong();    // as of JDK 8, this should return the strongest algorithm available to the JVM
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
    int indexRandom = random.nextInt( symbols.length );
    sb.append( symbols[indexRandom] );
}
String password = sb.toString();

Perl[editar]

use Crypt::Random::Source qw(get_strong);

while(length($out) < 15) {
   my $a = get_strong(1);
   $a =~ s/[^[:graph:]]//g;
   $out .= $a;
}
print $out;


Python[editar]

#!/usr/bin/python
import random, string
myrg = random.SystemRandom()
length = 10
# If you want non-English characters, remove the [0:52]
alphabet = string.letters[0:52] + string.digits
pw = str().join(myrg.choice(alphabet) for _ in xrange(length))
print pw

Referencias[editar]