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.
"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?
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!