Gerador de Senhas

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

[ Hits: 10.634 ]

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

Contagem de elementos de um array

parse_args

Olá mundo no GTK

Conta letras

A - Comando strdup


  

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