Stela Python Aulas Aula 6

Aula 6 Aprendizagem baseada em problemas Unidade 2

Quanto tempo para quebrar uma senha?

Operadores aritméticos, relacionais e lógicos, com uma conta que assusta.

Objetivo do dia

Entender como o Python avalia expressões aritméticas, relacionais e lógicas.

Antes da aula

Revisar variáveis e tipos.

Como conta ponto

Exercícios no GitHub.

P1 · o problema

Uma senha de 4 dígitos aguenta quanto tempo?

Um programa que testa 1.000 senhas por segundo leva quanto tempo para tentar todas as senhas numéricas de 4 dígitos? E de 6? E de 8? Hoje a gente faz essa conta em Python e descobre por que senha curta é senha fraca.

forca_bruta.py
1por_segundo = 1000   # tentativas23for digitos in (4, 6, 8):4    combinacoes = 10 ** digitos5    horas = combinacoes / por_segundo / 36006    print(f"{digitos} dígitos: {horas:.1f} horas")78# 4 dígitos: 0.0 horas9# 6 dígitos: 0.3 horas10# 8 dígitos: 27.8 horas
C1–C3 · conceitos

Três famílias de operadores

C1

Aritméticos

+ - * / como na calculadora. // é a divisão inteira, % é o resto e ** é a potência.

Precedência: primeiro **, depois * / // %, por último + e -. Na dúvida, parênteses.

1print(7 / 2)     # 3.52print(7 // 2)    # 33print(7 % 2)     # 14print(2 ** 10)   # 10245print(2 + 3 * 4)     # 146print((2 + 3) * 4)   # 20
C2

Relacionais

Comparam dois valores e devolvem True ou False: == != > < >= <=.

Cuidado: = guarda um valor; == compara. Trocar um pelo outro é o erro mais clássico do semestre.

1tentativas = 32print(tentativas == 3)   # True3print(tentativas != 3)   # False4print(tentativas >= 5)   # False
C3

Lógicos

and só é verdadeiro se as duas partes forem. or é verdadeiro se pelo menos uma for. not inverte.

A tabela-verdade mostra todas as combinações possíveis.

ExpressãoResultado
True and FalseFalse
True or FalseTrue
not TrueFalse
False or FalseFalse
1senha_ok = True2horario_ok = False3print(senha_ok and horario_ok)   # False4print(senha_ok or horario_ok)    # True5print(not horario_ok)            # True
CU1 · caso de uso

Avaliar se a senha aguenta um ataque

Ator: Equipe de segurança

Objetivo: Saber quanto tempo um atacante levaria para descobrir uma senha numérica.

Fluxo principal

  1. A equipe informa quantos dígitos a senha tem.
  2. O sistema calcula quantas combinações existem.
  3. Calcula o tempo a 1.000 tentativas por segundo.
  4. Mostra o resultado em horas.

E se...

  • A senha tem letras também: o número de possibilidades por posição muda de 10 para 36 ou mais.

Para pensar

  1. Que operador calcula as combinações?
  2. O que muda mais o resultado: um dígito a mais ou um computador mais rápido?
A1 · atividade

Desafio "Qual é a saída?"

Primeiro preveja, depois execute. O que você marcar fica salvo neste navegador.

0 de 7
S1 · conexão STEAM

Contas que protegem

M

Matemática

Combinações crescem em potência: cada dígito a mais multiplica por 10 o trabalho do atacante. É por isso que tamanho importa mais que complicação.

E

Eletrônica

and, or e not existem em chip: são as portas lógicas AND, OR e NOT, feitas de transistores.

D1 · desafio extra

Terminou antes? Tem mais.

Quantos anos levaria para testar todas as senhas de 12 caracteres com letras maiúsculas, minúsculas e números (62 possibilidades por posição), a um bilhão de tentativas por segundo?

J1 · materiais

Para estudar e praticar

E1 · entrega

Commit no GitHub

Na próxima aula, essas expressões viram decisões: o sistema vai escolher quem entra.