Executando verificação de segurança...
1

Preciso de ajuda, estou Aprendendo a Criptografar imagens com Python

Atualmente, estou me aventurando no mundo da criptografia de imagens usando Python como uma atividade divertida. Embora meu foco principal seja o desenvolvimento web, de vez em quando gosto de explorar áreas fora da minha zona de conforto para me divertir e aprender coisas novas. A criptografia de imagens despertou minha curiosidade, embora eu ainda tenha algumas dificuldades em compreender completamente o processo. É um desafio interessante!

Recentemente, encontrei um código gerado pelo ChatGPT relacionado à criptografia de imagens e decidi testá-lo em uma imagem aleatória que baixei da internet. Eu gostaria de compartilhar o código com vocês e pedir por orientações. Talvez alguém com mais experiência possa ajudar a entender melhor o código e fornecer sugestões sobre como posso melhorar minha abordagem na criptografia de imagens. Agradeço antecipadamente qualquer ajuda ou conselho que possam oferecer!

Código do ChatGPT:

from cryptography.fernet import Fernet

# Chave para criptografia (mesma chave usada para criptografar)
chave = b'...chave secreta...'

# Descriptografar a imagem
fernet = Fernet(chave)
with open("nome_da_imagem_criptografada.png", "rb") as arquivo_criptografado:
    dados_criptografados = arquivo_criptografado.read()
dados_descriptografados = fernet.decrypt(dados_criptografados)
with open("nome_da_imagem_descriptografada.png", "wb") as arquivo_descriptografado:
    arquivo_descriptografado.write(dados_descriptografados)
    

Meu Código:

from cryptography.fernet import Fernet

chave = Fernet.generate_key()

fernet = Fernet(chave)
with open("Foto-Azul.jpg" "rb") as arquivo:
    dados = arquivo.read()
dados_criptografados = fernet.encrypt(dados)
with open("Foto-Azul.jpg" "wb") as arquivo_criptografados:
    arquivo_criptografados.write(dados_criptografados)
    

A questão aqui é que o meu projeto não funcionou como esperado, e isso até que é compreensível, afinal, estou pedindo ajuda a um sistema de inteligência artificial para criptografar uma imagem. É óbvio que a IA não será capaz de realizar essa tarefa, já que a criptografia é um conceito mais complexo e uma máquina ainda não possui essa capacidade avançada.

Estou buscando ajuda neste fórum para desenvolver algo em Python, pois, além do HTML/CSS/JS, Python é a linguagem que estou estudando atualmente. Decidi explorar a área de criptografia, pois é teoricamente mais simples e quero aprender a desenvolver algo nessa área.

Gostaria muito que alguém pudesse me auxiliar. Será que alguém poderia verificar o código que escrevi? Estou em dúvida sobre onde errei e o que deveria ter feito de maneira diferente. Agradeço antecipadamente por qualquer orientação e ajuda que puderem fornecer.

1

"A questão aqui é que o meu projeto não funcionou como esperado"

qual o erro? o que já tentou? chegou a olhar a documentação da lib que está usando?

1

Todos os Import eu tenho que baixar? dei uma pesquisada e um cara usou um terminal chamado PIP e usou o seguinte comando: pip install cryptography.

Ou seja esse foi o meu erro? eu utilizei um modulo que não está baixado na minha maquina? eu nunca programei utilizando framework, biblioteca ou modulos, sempre que desenvolvo um site faço tudo de forma manual.

eu tenho que baixar esse terminal chamado pip?

1

Olá David, tranquilo.
1°) Reparei um detalhe no seu código que você colocou:
Os trechos with open("Foto-Azul.jpg" "rb") as arquivo: e with open("Foto-Azul.jpg" "wb") as arquivo_criptografados: estão errados. Precisam de uma vírgula (,) entre o nome do arquivo e o tipo de leitura.
Ficam assim: with open("Foto-Azul.jpg", "rb") as arquivo: e with open("Foto-Azul.jpg", "wb") as arquivo_criptografados:

2°) Você deve realmente importar o pacote cryptography. Só fazer pip install cryptography no seu terminal para instalar, conforme a documentação deles aqui e aqui.

3°) Um detalhe interessante é você gerar a chave e guardá-la, pois quando você quiser descriptografar sua imagem, você vai precisar da mesma chave que gerou a criptografia. No seu código acima, toda vez que você rodar o script python, ele vai gerar uma chave aleatória, e a chave gerada na segunda vez com certeza não vai ser igual a chave gerada na primeira, sendo impossível descriptografar. Já trabalhei e trabalho com esse pacote e sugiro algo assim:
1°) Gerar uma chave aleatória. Geralmente utilizo o comando: openssl rand -base64 32. Vai gerar algo do tipo: qR6zycFTzq6gftDtzkKIpEU7ytlySrdWr4vUTS3zsyY= e salva ela como variável de ambiente ou num arquivo, como desejar.
2°) No script mudaria para algo assim:

from cryptography.fernet import Fernet

chave = b"MINHA_CHAVE_SALVA_EM_ALGUM_LUGAR_SECRETO"

fernet = Fernet(chave)
with open("por-do-sol.png", "rb") as arquivo:
    dados = arquivo.read()

dados_criptografados = fernet.encrypt(dados)

with open("por-do-sol-criptografado.txt", "wb") as arquivo_criptografados: # sugiro salvar como um txt, já que é uma string que você vai salvar
    arquivo_criptografados.write(dados_criptografados)

3°) Por último, para descriptografar, eu faço algo do tipo:

from cryptography.fernet import Fernet

chave = b"MINHA_CHAVE_SALVA_EM_ALGUM_LUGAR_SECRETO"
fernet = Fernet(chave)

with open("por-do-sol-criptografado.txt", "rb") as arquivo_criptografados:
    dados_criptografados = arquivo_criptografados.read()

dados_da_imagem_descriptografada = fernet.decrypt(dados_criptografados)

with open("por-do-sol-descriptografado.png", "wb") as arquivo_descriptografado:
    arquivo_descriptografado.write(dados_da_imagem_descriptografada) # aqui você tem a imagem restaurada

Espero ter ajudado cara. Valeu!