Como Gerar Senhas com C++

Gerar senhas aleatórias é um dos exercícios iniciais para quem deseja avançar em segurança de sistemas.


Como Gerar Senhas com C++


Gerar senhas aleatórias é um dos exercícios iniciais para quem deseja avançar em segurança de sistemas. Nós já fizemos um artigo explicando como você pode gerar senhas, para mais detalhes leia a postagem completa: 23 Formas de Gerar e Guardar SENHAS FORTES; veja as explicações de comandos.

Nesse artigo conheceremos a lógica de gerar senhas com C++. Será um código simples usando somente senhas alfanuméricas, mas você pode melhorar adicionando caracteres especiais para tornar o código ainda mais completo.

Vamos ao passo a passo!


01. Criar um arquivo header único

Nesse exemplo vamos organizar nosso código para caso quisermos adicionarmos futuramente para algum projeto, logo, criaremos um “header único”(só um arquivo: .hpp), ou seja, a classe e a execução no mesmo arquivo:

vim genpass.hpp

#pragma once
#include <iostream>
#include <memory> // Opcional

class GenPass {};


02. Adicionando o conteúdo

Vamos agora adicionar 2 membros privados para usarmos na nossa função-membro, são eles:

  • std::string pass - Que armazerará a string que será retornada para o objeto;
  • e const std::string charset - A constante que possuirá os caracteres alfanuméricos, tanto com minúsculas como MAIÚSCULAS, além dos números;
#pragma once
#include <iostream>
#include <memory>

class GenPass {
  std::string pass;
  const std::string charset = "abcdefghijklmnopqrstuvwxyz"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "0123456789";
};

03. Adicionar a função-membro que retornará nossa senha

Essa função-membro receberá como argumento o tamanho da senha, você poderia escolher um valor mínimo padrão, mas vou deixar possível qualquer tamanho, mas é bom lembrar que senhas fortes possuem no mínimo 8 caracteres!

  • Ela reserva a quantidade de caracteres informada no argumento;
  • Inicializa o cronômetro para gerar a captura dos caracteres de charset de forma aleatória;
  • Incrementa ao membro pass o caractere até atingir o máximo informado no argumento;
  • Por final retorna o membro.
std::string gen_pass(int length){
  this->pass.reserve(length);
  srand(static_cast<unsigned int>(time(nullptr)));
  for (int i = 0; i < length; ++i) {
    this->pass += this->charset[
      rand() % this->charset.length()
    ];
  }
  return pass;
}

04. Arquivo genpass.hpp final

Ao final nosso arquivo completo ficará assim:

#pragma once
#include <iostream>
#include <memory>

class GenPass {
  std::string pass;
  const std::string charset = "abcdefghijklmnopqrstuvwxyz"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "0123456789";
  public:
  std::string gen_pass(int length){
    this->pass.reserve(length);
    srand(static_cast<unsigned int>(time(nullptr)));
    for (int i = 0; i < length; ++i) {
      this->pass += this->charset[
        rand() % this->charset.length()
      ];
    }
    return pass;
  }
};

Implementando nosso Gerador de Senhas com C++

Vamos criar um novo arquivo main.cpp e incluiremos nosso genpass.hpp, e chamaremos a função-membro gen_pass() com a quantidade de caracteres que queremos que nossa senha possua, nesse exemplo: Gerando uma senha alfanumérica com 8 caracteres!

#include "genpass.hpp"

int main(){
  auto g = std::make_unique<GenPass>();
  std::cout << g->gen_pass(8) << '\n';
  return 0;
}

Compile e rode: g++ main.cpp && ./a.out. Provável e similar saída:

skkb8Bms

Se quiser gerar com: 16, 32, 64 e 128 caracteres, respectivamente:

std::cout << g->gen_pass(16) << '\n';
std::cout << g->gen_pass(32) << '\n';
std::cout << g->gen_pass(64) << '\n';
std::cout << g->gen_pass(128) << '\n';

Simples e fácil, né?! Agora você já pode usar esse header único e adicionar aos seus projetos!


cpp


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!