question

Como escrever uma funcao de C++ para incrementar sequencialmente uma sequencia de caracteres?

Estou fazendo uma comparação na senha cracking para uma classe, e a exigência foi escrever em C++ um programa para gerar uma senha aleatória e então têm duas funções (um aleatório e um seqüencial) continuam a gerar novas senhas para comparar.

Eu já tenho uma função que irá gerar uma sequência de caracteres/número aleatória, que naturalmente será usada para ambos geram a senha e aleatórias tentativas de resolver a mesma senha. Este gerador pode ser modificado para incrementar a cadeia de caracteres em seqüência.

Basicamente, estou a pedir contando lógica com letras como letras, não as variáveis.

O que estou pedindo é que seria a lógica em dizer meu compilador "se (cadeia de caracteres um! = string b)" mudar o último caractere da seqüência de caracteres um para o próximo da fila, etc. sem ter que digitar mudança um b, b, c, c, d, etc.? E então a partir daí, depois de todos os personagens na, por falta de termo melhor, aquelas posição foram modificados e as seqüências de caracteres ainda não coincidirem, incremento das dezenas lugar e voltem para uma os coloque e começar de novo.
resposta Resposta
Isto é basicamente só contando em base n, onde n é o número de símbolos usados em senhas geradas. Então, se seu gerador de senha usa letras maiúsculas, letras minúsculas e dígitos apenas, então a base seria (26 + 26 + 10) = 62. Geralmente, um conjunto de pontuação é permitido, também, por que faria um número maior de base, até 94 se tudo não vazias printable caracteres ASCII são utilizados (0x21...0x7E). uma maneira simples de fazer isso: bool incString (string & pass, const string & símbolos) {... bool carregar = true;... índice de size_t = pass.length(), nsyms = symbols.length();... enquanto (carregam && (índice > 0))... {...... char c = pass [..índice];...... d size_t = symbols.find(c) + 1;...... se (d > = carry.length())...... { .... .... .... d = 0; .... .... } .... .... else .... .... {......... carregar = false;......} ...... passe [índice] = símbolos [d]; .... } ... voltar a transportar; } É digitado apenas on-the-fly e o... tokens são para recuo visual (fingir que eles são guias). A idéia geral é trabalhar a partir da direita para a esquerda (índice começa em pass.length() e diminui). Encontrar o char indexada na lista de símbolos e substituí-lo com o próximo. Se é o último símbolo na lista, envolver em torno do primeiro símbolo e deixar o carry boolean true. Se não é, em seguida, desmarque o transportar booleano false.

O loop é encerrado quando não há nenhum "transportar" para propagar-se para o próximo caractere, ou quando todos os caracteres na seqüência de passagem foram atualizados. O valor de retorno é o transporte final... true se a seqüência de passagem tem "enrolado" para a seqüência de partida (onde cada posição é igual a symbols[0]). Isto pode avisar o chamador para parar a busca.

Essa idéia é útil para mais de cracking de senha. Às vezes você implementar uma pesquisa de "força bruta" para uma solução, porque você não tem um método melhor para implementar. Você deseja examinar todas as possibilidades de uma só vez.

PS: Isto não é especialmente eficiente. Ele vai gastar muito tempo fazendo essas Pesquisas pass.find(c). Se você precisar correr mais rápido, olha usando uma matriz como uma tabela de pesquisa para o próximo símbolo. Há um custo de inicialização pequenas para construir a matriz, mas os incrementos de correr muito mais rápido.

ComentáriosComentários
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta


Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved