Blog

Postado em em 11 de julho de 2023

Senhas e Números Aleatórios em Python – Como Criar Senhas Seguras?

Como criar senhas e números aleatórios em Python? Aprenda as diferenças entre as bibliotecas e como essas senhas são geradas!

Aula Disponíveis

Aula 1 – Como Criar Senhas Seguras?

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala Impressionadores! Você sabe como gerar senhas e números aleatórios em Python? Você ainda utiliza a biblioteca Random para isso?

Hoje eu vou te mostrar outra biblioteca muito mais segura do que a biblioteca Random para que você possa gerar suas senhas com mais segurança!

A ideia é que você consiga criar senhas seguras em Python ou tokens sem que seja algo fácil de um usuário reproduzir.

Para isso nós vamos utilizar a biblioteca Secrets no Python, que também é um gerador de números aleatórios, mas a sua seed (semente) não pode ser definida como na biblioteca Random.

Isso faz com que essa seed seja sempre um valor diferente para criar sua senha ou seu número aleatório.

Dessa forma você consegue gerar uma senha, token ou qualquer outra informação aleatório de forma bem mais segura!

Como funciona o processo de criação de números aleatórios no computador?

Sempre que pedimos para uma linguagem de programação crie um número aleatório, ela não está criando um número totalmente aleatório, isso porque todo código que gera um número aleatório sempre utiliza um tipo de seed.

O que é seed?

O seed é como uma semente, ele pega um número que poder ser o número 2, por exemplo, e a partir desse número gera diversos outros números para nós.

No Python temos a biblioteca Random, dentro dessa função conseguimos gerar um número aleatório que podemos programar para estar entre 0 e 100, por exemplo:

Numero = Random.randint(0, 100)

Se printarmos este código vamos adquirir um número aleatório diferente entre 0 e 100 a cada print que fizermos e por este motivo temos a sensação de que se trata de um número aleatório, quando, na verdade, é o que chamamos de pseudoaleatório.

Não vamos entrar aqui na questão do que seria realmente aleatório, mas podemos dizer que este modelo de criação de número aleatório não é o mais seguro que temos disponível para usar.

Tanto que nós podemos definir dentro dos parênteses qual o valor que o Random vai usar como semente no seu processo, neste caso o número gerado será sempre o mesmo, pois a semente é um valor fixo.

O que faz o número gerado ser aleatório é que o valor usado como seed pode ser um valor em constante mudança.

O Random utiliza a data e hora, por exemplo, se colocarmos o dia e as horas como a semente vai parecer que o número gerado a cada segundo ou milésimos de segundos é aleatório, porque o dia e hora estão sempre mudando e gerando uma combinação diferente.

O quanto isso é seguro então?

Dentro do código existe uma função que faz com que o número gerado a partir da data e hora seja aleatório.

Então você pode testar, vai ver que não tem uma relação entre os resultados, porém, esse recurso tem um seed muito fácil, então seria simples para uma pessoa fazer o processo contrário e conseguir a senha, com tanto que ela saiba o horário em que você rodou o código.

Isso significa que ele não é recomentado para a geração de números de acesso em conta ou chave de API, por exemplo, que devem ter uma segurança maior.

Biblioteca Secrets – Como Criar Senhas Seguras?

Foi pensando nisso que o Python criou a biblioteca Secrets, essa biblioteca também tem um seed, mas o seed que essa biblioteca usa é o seed mais seguro que o seu computador é capaz de gerar.

Este seed não usa simplesmente a data e hora do computador, ele usa uma combinação de fatores do seu computador, por exemplo, o status atual do seu computador, quanto ele está gastando de memória e diversas situações específicas que estão acontecendo no seu computador naquele momento.

A partir desses dados o Secrets gera um seed aleatório muito difícil de ser rastreado e a partir desse seed ele gera uma senha aleatória.

Ferramenta

Dentro dessa biblioteca temos algumas ferramentas como o token, o url, etc.

import secrets

numero = secrets.choice(range(0, 100))

print(numero)

print(secrets.token_bytes(10))

print(secrets.token_hex(10))

print(secrets.token_urlsafe(10))

Resultado

b’v\x99XV\t\xbc\x9a\xa2k_’

9f56a2d55b15a0826273

XT1xwGTtUKMWQg

Imagem Python

Senhas e Números Aleatórios em Python

Note que cada resultado veio conforme pedimos no código, formato de bytes, hexadecimal e url.

É dessa forma que o seu computador e celular conseguem gerar uma senha segura para você.

O secrets se adapta a qualquer sistema operacional e por isso gera em cada um deles resultados diversos. Por isso é a senha mais segura que seu computador pode fornecer.

Outro ponto é que diferente do Random, o Secrets não permite que você defina o seed dele, não é possível que você determine o número pelo qual ele vai gerar a senha aleatória.

Voltar ao índice

Aula 2 – O Jeito Certo de Guardar Senhas e Chaves de API dos Seus Códigos

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala Impressionadores! Na aula de hoje eu quero te mostrar como guardar senhas e chaves de API de forma segura!

Em alguns casos, nós precisamos utilizar senhas ou chaves de API dentro do nosso código para executar uma determinada ação, mas você está armazenando essas informações de forma segura?

Primeiro eu vou te mostrar como seria a forma simples e não segura, que é inserindo chave de API no código, de forma direta.

Em seguida vou te mostrar 3 formas utilizando as variáveis de ambiente, que são formas seguras para guardar chaves de API ou para guardar senhas.

Você vai poder definir as variáveis de ambiente pelo terminal, pelas configurações do editor de texto ou através de um arquivo .env.

Por fim vou comentar rapidamente sobre uma outra opção, que é utilizando um sistema externo para gerenciar senhas.

E aí, bora aprender como guardar chaves de API de códigos e senhas de forma segura?

Então vem comigo que eu te mostro o passo a passo!

Nesta aula vamos usar um código que usamos na aula de ‘Como usar API do ChatGPT’, vou deixar o link aqui caso você queira se aprofundar!

Como guardar senhas de Chaves API?

Normalmente quando usamos uma API fazemos uso de uma senha para isso, essa senha pode ser armazenada de 3 formas.

A primeira forma é salvar a senha dentro do próprio código em uma variável ou podemos também criar um arquivo de texto e neste texto definir a senha.

Mas isso não é muito seguro porque você terá que disponibilizar este arquivo na hora de subir no GitHub ou quando for fazer o deploy em alguma plataforma.

Outro ponto é que todas as pessoas que estão desenvolvendo aquela solução com você terão acesso à senha também, embora não seja muito seguro essa é a primeira forma usar a senha.

A segunda forma de fazer isso é também a mais comum dentre elas, neste modo utilizamos as variáveis de ambiente, se você não sabe o que são variáveis de ambiente clique no link que temos uma aula detalhada!

Basicamente as variáveis de ambiente você consegue definir por algo que só tem dentro do seu computador, ou só tem em determinada página ou programa.

Sempre é possível definir variáveis de ambiente, pois este é um processo padrão, então a variável terá um valor dentro do servidor e outro valor no seu computador, sendo assim, se outra pessoa pegar o código ela não terá acesso ao que existe somente no seu ambiente.

Como criar variáveis de ambiente?

Existem duas formas de usar variáveis de ambiente, uma delas é no seu terminal.

No Windows você vai rodar no terminal da seguinte forma:

>setx API_KEY-VIDEOLIRA “sfhsiufsfyusg67sgs6gsf”

Neste código acima, que vamos passar no terminal estamos colocando o setx + nome da variável + a senha entre aspas.

Dessa forma dá certo, porém, é provável que você tenha que fechar e abrir o editor de código para que ele reconheça a senha.

Alguns editores como o PyCharm dão a possibilidade de você acessar as configurações e lá encontrar a opção Environment variables.

Clicando nesta opção você pode definir o nome e o valor da variável, feito isso a variável vai passar a existir no seu editor.

Como usar a nova senha dentro do seu código?

Para usar a senha recém-criada você deve importar a biblioteca ‘os’,

import requests

import json

import os

chave = os.getenv("API_KEY_VIDEOLIRA")

print(chave)

Desta forma você consegue ver a chave.

Outra forma de fazer isso é por meio de um arquivo, vamos criar um arquivo .env, este arquivo é especial, com ele você pode definir suas variáveis de ambiente e quando for fazer o deploy esse arquivo por padrão não é enviado.

Claro que manualmente você ainda pode enviar este arquivo, mas quando é enviado com o projeto, por padrão o GitHub descarta e não carrega este arquivo.

Para coletar as variáveis que existem em um arquivo .env você deve baixar a biblioteca no seu terminal:

>pip install python-dotenv

Agora é só importar para dentro do código e utilizar

import requests

import json

import os

from dotenv import load_dotenv

load_dotenv()

Feito isso, você pode usar a chave normalmente em seu código

A terceira opção cria um nível de dificuldade a mais para o seu código e por isso não é tão utilizada, porém, algumas pessoas preferem este modelo.

Esta forma depende de um sistema externo, então você terá que pedir autorização com seu código para um sistema externo que irá te disponibilizar a senha.

Conclusão – O Jeito Certo de Guardar Senhas

Você já conhecia essas 3 maneiras de armazenar seus códigos? Preparei esta aula para te mostrar como funcionam e qual a diferença entre os três modos de guardar suas senhas.

Geralmente o segundo modo é o mais utilizado, sabendo disso você pode optar por aprender uma forma nova de proteger suas senhas ou ao menos entender quantas opções temos disponíveis e suas diferenças.

Eu fico por aqui! Até breve,

Voltar ao índice

Conclusão – Senhas e Números Aleatórios em Python

Vimos na primeira aula como funciona a biblioteca Random e comparamos com o Secrets. Meu objetivo nesta aula foi muito mais explicar a vocês como funciona a lógica por trás dos números que são criados aleatoriamente do que fazer demonstrações mais complexas sobre este tema.

Você pode conseguir gerar números aleatórios usando API que criam esses números a partir de diversos outros números ou até posições de planetas, porém acredito que se você precisar de uma senha segura o Secrets é seguro o suficiente.

Na segunda aula abordei a forma certa de salvar a senha, você verá que existe mais de um modo de fazer isso e pode escolher o que melhor se encaixa na sua necessidade.

Se você gostou deste conteúdo e quer aprender ainda mais, vou deixar aqui o link de mais uma aula para você!

CONCEITOS IMPORTANTES EM PYTHON QUE TODO PROGRAMADOR PRECISA SABER

Eu fico por aqui! Um abraço,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador