Ayuda con la contraseña para la codificación! [duplicar]

1

Entonces, soy terrible con cualquier tipo de codificación, y necesito ayuda para generar una serie de contraseñas posibles. Olvidé la combinación de una contraseña que ingresé en un correo electrónico: conozco la contraseña, pero no la letra en mayúscula y la que no.

Estoy intentando escribir algún código para generar todos los resultados posibles de la contraseña con mayúsculas en diferentes lugares. La contraseña tiene 7 caracteres de longitud.

Editar: También sé la ubicación, por lo que no necesito un aleatorizador. Solo las mayúsculas y minúsculas en todas las ubicaciones posibles.

Edición 2: lo intenté

def random_char(y):
    return ''.join(random.choice(string.ascii_letters) for x in range(y))

print (random_char(7))

no funcionó, necesito que la salida sean las letras y el número específicos que sé que puse en mi contraseña.

    
pregunta user82162 30.07.2015 - 01:21
fuente

3 respuestas

0

Si la contraseña tiene 7 caracteres de longitud, entonces ese es el número máximo de caracteres alfa posibles (algunos pueden ser numéricos). Por lo tanto, el número máximo de combinaciones será de 128, lo que seguramente solo requiere cierta determinación y un poco de tiempo para trabajar metódicamente.

Por ejemplo,

contraseña contraseña contraseña contraseña contraseña contraseña contraseña contraseña

    
respondido por el John W 30.07.2015 - 01:28
fuente
0

Aquí hay un código C atroz, complicado y no estándar, que funciona:

static void
print_caps(char *str)
{
        uint64_t x, y;
        int i;
        char buf[8];

        if (strlen(str) != 7) {
                return;
        }
        x = 0;
        for (i = 0; i < 7; i ++) {
                x <<= 8;
                x += ((unsigned char *)str)[i];
        }
        printf("%s\n", str);
        y = 32;
        buf[7] = 0;
        do {
                for (i = 0; i < 7; i ++) {
                        buf[i] = (x ^ y) >> ((6 - i) << 3);
                }
                printf("%s\n", buf);
                y <<= 8;
                y ^= (y >> 56) * (257 + ((uint64_t)1 << 56));
        } while (y != 32);
}

La parte divertida es, por supuesto, entender por qué funciona (y se puede considerar que esa parte tiene al menos cierta relevancia indirecta en el campo de la criptografía).

(Por supuesto, se podría haber hecho de una forma mucho más breve, más eficiente y aburrida).

    
respondido por el Tom Leek 30.07.2015 - 03:17
fuente
0

Dado que no eres un programador, es probable que sea más fácil si puedes intentarlo en la línea de comando bash :

$ uc() { echo "$1" |tr '[a-z]' '[A-Z]'; }
$ pwmorph() { for i in {0..6}; do echo "${1:0:i}$(uc "${1:i:1}")${1:i+1:7}"; done; }
$ pwmorph abcdefg
Abcdefg
aBcdefg
abCdefg
abcDefg
abcdEfg
abcdeFg
abcdefG

Aunque introducir esto en el mecanismo para probarlo puede ser más difícil de automatizar.

  • La primera línea define una función para mayúsculas en su entrada.
  • La segunda línea define una función que pasa de cero a seis, mostrando la subcadena antes de la letra que se va a colocar en mayúsculas ( ${1:0:i} muestra el argumento $1 de cero a i ), luego esa letra en mayúsculas ( ejecutando uc en ${1:i:1} , que es el argumento de un desplazamiento de i y longitud de 1), luego el resto de la cadena ( ${1:i+1:7} de un desplazamiento de i+1 con una longitud de 7 o más el final de la cadena).
  • La tercera línea lo ejecuta para la contraseña abcdefg

El código anterior es solo para bash . Aquí está la versión zsh :

$ pwmorph() { for i in {1..7}; do echo "${1[0,i-1]}${(U)1[i]}${1[i+1,7]}"; done; }
$ pwmorph abcdefg

zsh no necesita una función en mayúsculas ( ${(U)VAR} es la versión en mayúsculas de $VAR ) y sus índices comienzan con 1 en lugar de 0 como bash . Las subcadenas variables también se llaman de manera diferente.

    
respondido por el Adam Katz 30.07.2015 - 03:57
fuente

Lea otras preguntas en las etiquetas