Gerador de Senhas

Publicado por Thiago (última atualização em 18/06/2011)

[ Hits: 10.632 ]

Download passwdgen.c




Simples programa em C para geração de senhas.
Serve como base para criação de wordlists.

  



Esconder código-fonte

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

/*
 *
 * passwdgen 1.0
 *
 * Copyright (C) 2009 Free Software Foundation, Inc.
 * License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
 * This is free software: you are free to change and redistribute it.
 * There is NO WARRANTY, to the extent permitted by law.
 *
 * Autor: Thiago Alexandre Martins Monteiro
 * Local: Goiania/Goias/Brasil
 * Data: 16/04/2011
 *
 * Este programa tem como objetivo gerar senhas simples. Tenho plena certeza de que este
 * codigo pode e deve ser melhorado. Respeito a criatividade dos outros e mantenha a autoria.
 *
 * OBS: Esse programa pode ser portado para Windows com pouco esforco.
 *
 * Compile com: gcc passwdgen.c -o passwdgen
 */

/* Protótipo das funções */

int validarComprimentoSenha( int len );
int validarQuantidadeDeVezes( int vezes );
void mostrarAjuda( void ); 
void mostrarVersao( void );
void gerarSenha( int len );

int main( int argc, char *argv[] )
{
    int len = 8; /* comprimento da palavra */
    int vezes;
    int register i = 0;  

    system( "clear" ); /* no RuWindows use system("cls"); */
    puts( "{FONTE}33[32m\tPASSWDGEN (Gerador de Senhas){FONTE}33[30m" );

    srand( time( NULL ) );

    switch (argc) {
        case 1:
            puts( "\n{FONTE}33[34mProcessando...{FONTE}33[30m\n" );
            sleep(2);
            
            gerarSenha( len );
            
            break;  

        case 2:
            if ( (strcmp( argv[1], "-h" ) == 0) || (strcmp( argv[1], "--help" ) == 0) ) {
                mostrarAjuda();
            }

            if ( (strcmp( argv[1], "-v" ) == 0) || (strcmp( argv[1], "--version" ) == 0) ) {
                mostrarVersao();
            }                        
            break;

        case 3:
            puts( "\n{FONTE}33[34mProcessando...{FONTE}33[30m\n" );
            sleep(2);
                
            /* -l de length (comprimento da senha) */
            if ( (strcmp( argv[1], "-l" ) == 0) || (strcmp( argv[1], "--length" ) == 0) ) {
                /* Converte de string para inteiro */
                len = atoi( argv[2] );

                gerarSenha( len );
            }

            /* -a de amount (quantas senhas devem ser geradas) */
            if ( (strcmp( argv[1], "-a" ) == 0) || (strcmp( argv[1], "--amount" ) == 0) ) {
                vezes = atoi( argv[2] );

                if ( validarQuantidadeDeVezes( vezes ) )
                    exit(1);
                    
                for (i = 0; i < vezes; i++) {
                    gerarSenha( len );
                }
            }           
            break;

        case 4:
            puts( "\n{FONTE}33[34mProcessando...{FONTE}33[30m\n" );
            sleep(2);
        
            if (strcmp( argv[1], "-al" ) == 0) {
                vezes = atoi( argv[2] );
                len = atoi( argv[3] );
            }

            if (strcmp( argv[1], "-la" ) == 0) {
                len = atoi( argv[2] );
                vezes = atoi( argv[3] );
            }

            if ( validarQuantidadeDeVezes( vezes ) ) {
                exit(1);
            }

            for (i = 0; i < vezes; i++) {
                gerarSenha( len );
            }
            break;
            
        default:
            printf( "\n{FONTE}33[32m\tDigite: passwdgen -help para obter ajuda.{FONTE}33[30m\n\n" );
    }
    
    return 0;
}

int validarComprimentoSenha( int len ) {
    if (len < 1 || len > 50) {
        printf( "\t{FONTE}33[31mErro: O comprimento da senha e invalido.\n\tComprimentos validos vao de 1 ate 50 caracteres.{FONTE}33[30m\n\n" );
        return 1;
    } else return 0;
}

int validarQuantidadeDeVezes( int vezes ) {
    if (vezes < 1 || vezes > 1000) {
        printf( "\t{FONTE}33[31mErro: A quantidade de senhas a serem geradas e invalida.\n\tA quantidade de vezes valida vai de 1 ate \
1000.{FONTE}33[30m\n\n" );
        return 1;
    } else return 0;
}

void mostrarAjuda( void ) {
    char c = 'a';
    
    while (c != 'q') {
        printf( "\n\t{FONTE}33[34mPASSWDGEN{FONTE}33[30m\n" );
        printf( "\n\t{FONTE}33[34mNOME: passwdgen - gera senhas simples e imprime na saida padrao.\n{FONTE}33[30m" );
        printf( "\n\t{FONTE}33[34mSINOPSE: passwdgen [OPTION] ... [NUMBER] ...\n{FONTE}33[30m" );
        printf( "\n\t{FONTE}33[34mDESCRICAO: Gera senhas simples e imprime na saida padrao.{FONTE}33[30m\n" );
        printf( "\n\t{FONTE}33[34m -a, --amount\n\t\t Define a quantidade de senhas a serem geradas.{FONTE}33[30m" );
        printf( "\n\n\t{FONTE}33[34m -h, --help\n\t\t Apresenta a tela de ajuda do sistema.{FONTE}33[30m" );
        printf( "\n\n\t{FONTE}33[34m -l, --length\n\t\t Define o comprimento (quantidade de caracteres) da senha.{FONTE}33[30m" );
        printf( "\n\n\t{FONTE}33[34m -v, --version\n\t\t Apresenta o numero de versao do programa.{FONTE}33[30m" );
        printf( "\n\n\t{FONTE}33[34m EXEMPLOS:{FONTE}33[30m" );
        printf( "\n\n\t\t{FONTE}33[34mpasswdgen -a 5\n\t\tGera 5 senhas de 8 caracteres.{FONTE}33[30m" );
        printf( "\n\n\t\t{FONTE}33[34mpasswdgen -l 20\n\t\tGera uma senha de 20 caracteres.{FONTE}33[30m" );
        printf( "\n\n\t\t{FONTE}33[34mpasswdgen -al 3 5\n\t\tGera 3 senhas de 5 caracteres.{FONTE}33[30m" );
        printf( "\n\n\t\t{FONTE}33[34mpasswdgen -la 3 5\n\t\tGera 5 senhas de 3 caracteres.{FONTE}33[30m" );
        printf( "\n\n\t{FONTE}33[34m AUTOR: Thiago Alexandre M. Monteiro{FONTE}33[30m\n" );
        c = getchar();
    }
    return;
}

void mostrarVersao( void ) {
    printf( "\n\t{FONTE}33[34mpasswdgen 1.0\n\n\tCopyright (C) 2009 Free Software Foundation, Inc. \
\n\tLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. \
\n\tThis is free software: you are free to change and redistribute it. \
\n\tThere is NO WARRANTY, to the extent permitted by law.{FONTE}33[30m\n\n" );

    return;
}

void gerarSenha( int len ) {
    int register i;

    char alfabeto[] = {
        '0', '1', '2', '3', '4', '5', '6', '7', 
        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 
        'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 
        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
        'W', 'X', 'Y', 'X', 'a', 'b', 'c', 'd', 
        'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 
        'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
        'u', 'v', 'w', 'x', 'y', 'z', '*', '#'
    };
    
    char palavra[len];
    
/*    srand( time( NULL ) ); Definir a semente aqui faz com que a senha se repita */ 

    if ( validarComprimentoSenha( len ) )
        exit(1);
        
    for (i = 0; i < len; i++) {
        palavra[i] = alfabeto[ rand() % 64 ]; /* 62 é o tamanho do alfabeto */
    }
    
    palavra[i] = '{FONTE}'; /* terminador de string */
    printf("\t%s\n", palavra);  

    return;
}

Scripts recomendados

Relógio com data e hora

CPU e memória em C no GNU/Linux

Exceções em C através de try-throw-catch

Organizar variáveis em ordem crescente

Calc Compact


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts