Funções para gerar base64 encode e decode no C++

Simples e útil para o dia a dia .


Funções para gerar base64 encode e decode no C++

Hoje a dica do cpp::daily será bem simples, mas bem útil.

Dia desse surgiu uma dúvida de um dos alunos do Curso de C++ Moderno Avançado de como ele iria criar uma codificação com base64 com C++ .

Tudo isso pode ser feito de várias maneiras, mas a maneira mais simples e mais portável entre sistemas que encontrei e fiz algumas modificações para ficar mais simples possível a implementação foi essa:

Função para fazer encode e decode em base64

Código pronto para ser implementado.

#include <iostream>
#include <vector>
#include <algorithm>

static std::string base64_encode(const std::string &in) {

  std::string out;

  int val = 0, valb = -6;
  for (u_char c : in) {
    val = (val << 8) + c;
    valb += 8;
    while (valb >= 0) {
      out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val>>valb)&0x3F]);
      valb -= 6;
    }
  }
  if (valb>-6) out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val<<8)>>(valb+8))&0x3F]);
  while (out.size()%4) out.push_back('=');
  return out;
}

static std::string base64_decode(const std::string &in) {

  std::string out;

  std::vector<int> T(256,-1);
  for (int i=0; i<64; i++){
    T["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[i]] = i;
  }

  int val=0, valb=-8;
  for (u_char c : in) {
    if (T[c] == -1) break;
    val = (val << 6) + T[c];
    valb += 6;
    if (valb >= 0) {
      out.push_back(char((val>>valb)&0xFF));
      valb -= 8;
    }
  }
  return out;
}

int main(){

  std::string meu_conteudo = {"Isso será codificado!"};
  std::string codificado = base64_encode( meu_conteudo );

  std::cout << codificado << '\n';

  std::string decodificado = base64_decode( codificado );

  std::cout << decodificado << '\n';

  return 0;
}

Se quiser você ainda pode usar argc e argv para gerar parâmetros via linha de comando para você codificar e/ou decodificar em tempo de execução.

Leia o código e analise para maior compreensão.

Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cppdaily 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!