Gerador de Senhas
Publicado por Thiago (última atualização em 18/06/2011)
[ Hits: 10.929 ]
Simples programa em C para geração de senhas.
Serve como base para criação de wordlists.
#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;
}
Um algoritmo genético para o TSP (Travel Salesman Problem)
Integração numérica - Método da Quadratura Gaussiana
Simulador do Sorteio da Mega Sena
Programa para cálculo vetorial
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
ERRO: LAZARUS 4.2 64 no Linux MINT não entra mais apos ajustar desktop... (0)
Pergunta: Meu teclado não está respondendo direito como e consertar? (2)
Secure boot, artigo interessante, nada técnico. (6)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (0)









