L'aiuto della password con la codifica! [duplicare]

1

Quindi, sono terribile con qualsiasi tipo di codifica e ho bisogno di aiuto per generare una serie di possibili password. Ho dimenticato la combinazione di una password che ho inserito per e-mail: conosco la password, solo che non è stata maiuscola e quale non è stata.

Sto provando a scrivere del codice per produrre tutti i possibili risultati della password con maiuscole in posti diversi. La password è lunga 7 caratteri.

Modifica: conosco anche il posizionamento, quindi non ho bisogno di un randomizzatore. Solo la maiuscola e le minuscole in tutte le possibili posizioni.

Modifica 2: ho provato

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

print (random_char(7))

non ha funzionato, ho bisogno che l'output sia la specifica lettera e il numero che so di aver inserito nella mia password.

    
posta user82162 30.07.2015 - 01:21
fonte

3 risposte

0

Se la password è lunga 7 caratteri - allora questo è il numero massimo di caratteri alfa possibile (alcuni potrebbero essere numeri). Pertanto il numero massimo di combinazioni sarà pari a 128, il che richiede sicuramente un po 'di determinazione e un po' di tempo per lavorare in modo metodico.

per es.

PASSWORD parola d'ordine parola d'ordine parola d'ordine parola d'ordine parola d'ordine parola d'ordine password

    
risposta data 30.07.2015 - 01:28
fonte
0

Ecco un codice C atroce, complicato, non standard, che funziona:

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 divertente, naturalmente, capendo perché funziona (e quella parte può essere considerata avere almeno una certa rilevanza indiretta nel campo della crittografia).

(Ovviamente avrebbe potuto essere fatto in un modo molto più breve, più efficiente e noioso.)

    
risposta data 30.07.2015 - 03:17
fonte
0

Dato che non sei un programmatore, è probabilmente più semplice se puoi provarlo su una riga di 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

Anche se inserire questo meccanismo nel tentativo di provarlo potrebbe essere più difficile da automatizzare.

  • La prima riga definisce una funzione in maiuscolo il suo input.
  • La seconda riga definisce una funzione che va da zero a sei, mostrando la sottostringa prima che la lettera sia maiuscola ( ${1:0:i} campiona l'argomento $1 da zero a i ), quindi quella lettera in maiuscolo ( correndo uc su ${1:i:1} , che è l'argomento da un offset di i e lunghezza di 1), quindi il resto della stringa ( ${1:i+1:7} da un offset di i+1 con una lunghezza di 7 oppure la fine della stringa).
  • La terza riga la esegue per la password abcdefg

Il codice sopra riportato è per bash solo . Ecco la versione zsh :

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

zsh non ha bisogno di una funzione maiuscola ( ${(U)VAR} è la versione maiuscola di $VAR ) e i suoi indici iniziano con 1 piuttosto che 0 come bash . Anche le sottostringhe variabili sono chiamate diversamente.

    
risposta data 30.07.2015 - 03:57
fonte

Leggi altre domande sui tag