Bases numéricas

Definição

Base numérica é um conjunto de símbolos (ou algarismos) com o qual podemos representar uma certa quantidade ou número.

Normalmente encontramos bases numéricas a partir do 10, onde o conjunto de algarismos possui dez possibilidades: 0 ao 9.

Algumas das bases numéricas mais comuns são:

  • Binária (2)

  • Hexadecimal (16)

  • Octal (8)

Conversão de Bases

1. Divisão Sucessiva

Converte números de uma base maior para uma base menor. Exemplo: 2510 → x16

25 ÷ 16 = 1,  resto 9  (9 em hexadecimal é 9)  
1 ÷ 16 = 0,  resto 1  (1 em hexadecimal é 1)  

Resultado: 1916

2. Conversão de Base Fracionária

Para converter bases "diferentes", pode-se transformar para a base 10 antes. Exemplo: 3B516 → x7

3B516 = 3×16² + 11×16¹ + 5×16⁰ 3B516 = 94910

Agora, convertendo da base 10 para base 7:

949 ÷ 7 = 135, resto 4  
135 ÷ 7 = 19, resto 2  
19 ÷ 7 = 2, resto 5  
2 ÷ 7 = 0, resto 2  

Resultado: 25247

3. Conversão Direta

Quando as bases são potências umas das outras, pode-se agrupar os dígitos. Exemplo: 101000112 → x4

Agrupar: 10 10 00 11  
Converter: 10₂ = 2₄, 10₂ = 2₄, 00₂ = 0₄, 11₂ = 3₄  

Resultado: 20234


Existem algumas outras formas básicas de conversão de bases, porém as ferramentas facilitam bastante esse processo. Alguma delas são:

  1. Calculadora Online - Conversão de Bases Possui uma ferramenta que pode converter um número em base n para qualquer número em base x.

    • Ideal para transformar bases irregulares em bases padrão, como base 8 ou base 16.

    • Bases padrão possuem diversos decoders online disponíveis para análise e interpretação.

  2. Dcode - Base 32 Encoding Além de oferecer um decodificador para base 32, também fornece:

    • Conversão para base 64.

    • Conversão para base 8.

    • Capacidade de entregar os números diretamente no formato ASCII (formato de texto).

  3. Bibliotecas Python

  • Existem algumas bibliotecas em Python que facilitam as conversões e testes por meio de código, como:

    • PyCryptodome: Pode ser utilizado para:

      • Converter uma sequência numérica para string.

      • Decodificar sequências numéricas.

Conversão de Texto para Sequências Numéricas

ASCII

ASCII é um padrão de codificação de 7 bits para representar caracteres de texto.

Exemplo: Converter a palavra "Pedro" em ASCII:

nome = "Pedro"
criptografado = [ord(letra) for letra in nome]
print(criptografado)  # [80, 101, 100, 114, 111]

Agora, converter de ASCII para texto:

flag = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125]
palavranova = ''.join(chr(letra) for letra in flag)
print(palavranova)  # crypto{ASCII_pr1nt4bl3}

Conversão para Hexadecimal

Quando um texto é convertido para hexadecimal, cada caractere se torna seu código ASCII em base 16.

Exemplo:

hexadecimal = "63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d"
bytes_flag = bytes.fromhex(hexadecimal)
flag = bytes_flag.decode('utf-8')
print(flag)  # crypto{You_will_be_working_with_hex_strings_a_lot}

Conversão para Base64

Base64 é uma codificação que representa dados binários como texto ASCII.

Exemplo de conversão de hexadecimal para Base64:

import base64

flag_base16 = "72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf"
binarios = bytes.fromhex(flag_base16)
flag_base64 = base64.b64encode(binarios).decode('utf-8')
print(flag_base64)

Agora, decodificando uma string Base64 para texto legível:

flag = "Q1RGe0ZsYWdneVdhZ2d5UmFnZ3l9"
binarios = base64.b64decode(flag)
flag_ascii = binarios.decode('utf-8')
print(flag_ascii)  # CTF{FlaggyWaggyRaggy}

Ferramentas Online

Atualizado