# MD5 / SHA1 / Base64

### MD5

Gerando hash de uma string

```bash
# Linux
echo -n "teste" | md5sum
```

Gerando hash de um arquivo

```bash
# Linux
md5sum <arquivo>

# Windows
Get-FileHash <file> -Algorithm MD5
certutil -hashfile <file> md5
```

O comando `md5sum` (Linux) possui o parâmetro `-b`, para realizar a operação em `binário`, pois por padrão ele utiliza a opção `-t`, que é a verificação com `text`.

###

### SHA1

Gerando hash de uma string

```bash
echo -n "teste" | sha1sum
```

Gerando hash de um arquivo

```bash
# Linux
sha1sum <arquivo>

# Windows
certutil -hashfile <file> sha256
```

###

### Base64

Ahh o Base64... esse é um encoding que "talvez" nem deveria estar aqui na seção de criptografia, mas como é muito utilizada em torno de funções criptográficas, vale a pena citá-la. Basicamente, ele percorre todos os bytes e transforma cada conjunto de 6 bits em um byte legível (8 bits). O resultado é que o tamanho dos bytes codificados aumenta em cerca de 33%.

#### Encode

Linux

```bash
# Convertendo string em base64
echo -n "<string>" | base64
# Convertendo string em base64 e depois em MD5
echo -n "<string>" | base64 -w 0 | md5sum

# Encode de arquivo
base64 -w 0 <file>
```

Windows

```bash
# Convertendo string em base64
$str = '<string>'
[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($str))

# Encode de arquivo
[Convert]::ToBase64String((Get-Content -path "<file>" -Encoding byte))
```

#### Decode

Linux

```bash
echo -n "dGVzdGU=" | base64 -d
base64 -d <file>
echo "dGVzdGU=" | python -m base64 -d
openssl enc -base64 -d <<< 'dGVzdGU='
```

Windows (Powershell)

```bash
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('<base64_encode>'))
[IO.File]::WriteAllBytes("<output_file>", [Convert]::FromBase64String("<base64_encode>"))
```



#### Execução de Comandos

Linux

```bash
echo '<base64>' | base64 -d | bash
```

Windows

```bash
Powershell -EncodedCommand "d2hvYW1p"
iex ([System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("d2hvYW1p")))
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("d2hvYW1p")) | iex
iex ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("d2hvYW1p")))
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("d2hvYW1p")) | iex
```



### Sites

```bash
# Como o base64 funciona
https://marquesfernandes.com/o-que-e-base64-para-que-serve-e-como-funciona/
```
