Mapa da aula
Aula 03 publicada. Mapa, exemplo, EX007.
flowchart TD
N0["3.1 Scripts para as operações"]
N1["Laboratório — Codificação não é cifração"]
N2["3.2 Ler o laboratório de codificação"]
N3["3.3 Segredos em scripts"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX007"]
Desenho lógico
flowchart LR
N0["3.1 Scripts para as operações"]
N1["Laboratório — Codificação não é cifração"]
N2["3.2 Ler o laboratório de codificação"]
N3["3.3 Segredos em scripts"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX007"]
[3.1 Scripts para as operações]
|
v
[Laboratório — Codificação não é cifração]
|
v
[3.2 Ler o laboratório de codificação]
|
v
[3.3 Segredos em scripts]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX007]
Objetivos de aprendizagem
Você vai (1) escrever scripts simples em Python para as operações; (2) distinguir codificação de cifração; (3) tratar segredos em scripts com segurança.
3.1 Scripts para as operações
Os tecnólogos automatizam o trabalho rotineiro com scripts. Os primeiros scripts de Rosa leem exportações em CSV da lista de certificados da prefeitura e imprimem os que expiram em até trinta dias. Ela aprende a usar a biblioteca padrão: csv para ler arquivos, datetime para a aritmética de datas e argparse para as opções de linha de comando. Ela escreve funções pequenas, com nomes claros, e testa cada uma com dados de exemplo antes de executá-las sobre as exportações reais. Owen revisa o código e pede que ela trate as linhas ruins com elegância, já que as exportações dos sistemas mais antigos às vezes contêm datas em branco que, de outra forma, derrubariam o script.
Laboratório — Codificação não é cifração
"""Encoding is not encryption: Base64 and hex are reversible by anyone (synthetic permit record)."""
import base64
REC = b"permit=PK-2291;plate=HRV-447;zone=4"
def main():
b64 = base64.b64encode(REC).decode()
print("base64:", b64)
print("decoded without any key:", base64.b64decode(b64).decode())
print("hex:", REC.hex()[:32], "...")
print("length grows by", len(b64) - len(REC), "chars; secrecy added: none")
if __name__ == "__main__":
main()
Execute com python3 lab_encoding.py. Saída verificada:
base64: cGVybWl0PVBLLTIyOTE7cGxhdGU9SFJWLTQ0Nzt6b25lPTQ=
decoded without any key: permit=PK-2291;plate=HRV-447;zone=4
hex: 7065726d69743d504b2d323239313b70 ...
length grows by 13 chars; secrecy added: none
3.2 Ler o laboratório de codificação
O laboratório codifica em Base64 um registro sintético de licença. A saída parece embaralhada, mas decodificá-la não exige nenhuma chave e imprime exatamente o registro original. A codificação hexadecimal, da mesma forma, apenas muda a representação. O Base64 deixa o texto treze caracteres mais longo e não acrescenta nenhum sigilo. Rosa encontra uma integração da prefeitura que "protegia" os dados das licenças em trânsito codificando-os em Base64 dentro de uma requisição HTTP não cifrada. Ela a relata, e a integração passa para HTTPS com TLS. A lição é simples, mas importante: a codificação serve a formatos de transporte e armazenamento, enquanto a confidencialidade exige cifração com uma chave.
3.3 Segredos em scripts
O script seguinte de Rosa chama uma API interna que exige um token. Sua primeira versão escreve o token diretamente no código, o que Owen rejeita: o código é copiado, compartilhado e versionado em repositórios. Ela move o token para uma variável de ambiente preenchida pelo repositório de segredos da prefeitura e faz o script falhar de forma clara se ele estiver ausente. Ela também evita imprimir tokens nos logs e usa o módulo secrets quando um script precisa gerar um valor aleatório, nunca o módulo random. Esses hábitos se aplicam a todos os scripts que ela escreve depois.
Exemplo resolvido
Rosa escreve um script de expiração de certificados com leitura tolerante, mostra que o Base64 não acrescenta sigilo, faz uma integração com Base64 sobre HTTP passar para TLS e tira um token de API do código.
Caso sintético. O registro de licença e a integração são inventados.
Erros e limites
A ofuscação, como o Base64, leva as pessoas a acreditar que os dados estão protegidos. Variáveis de ambiente são melhores que o código, mas ainda precisam de um repositório de segredos por trás.
Exercícios
-
EX007 — Linhas ruins. O que Owen pediu que Rosa tratasse no script de expiração?
Mostrar critérios de avaliação
Rubrica: 3 = linhas em branco ou ruins das exportações antigas, sem derrubar o script;; 2 = linhas ruins;; 1 = velocidade;; 0 = nenhuma. -
EX008 — Achado do Base64. O que Rosa encontrou, e o que resolveu?
Mostrar critérios de avaliação
Rubrica: 3 = dados de licenças codificados em Base64 sobre HTTP simples; passaram para HTTPS;; 2 = achado e correção;; 1 = um;; 0 = nenhuma. -
EX009 — Tratamento do token. Para onde Rosa moveu o token da API, e por quê?
Mostrar critérios de avaliação
Rubrica: 3 = para uma variável de ambiente vinda do repositório de segredos, já que o código é copiado e versionado;; 2 = variável de ambiente;; 1 = deixou no código;; 0 = nenhuma.
Síntese
Scripts operacionais exigem um tratamento de dados limpo, a compreensão clara de que codificação não é cifração e um manuseio disciplinado dos segredos.