-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Perfeito. Vamos agora usar AES/CBC/PKCS5Padding com IV, que é mais seguro que ECB.
Abaixo está a implementação completa para o servidor Flask, que:
- Recebe os dados criptografados
- Usa a mesma chave secreta e o IV enviados pelo app Android
- Descriptografa corretamente
- Salva o conteúdo como
decrypted_log.txt
✅ ESTRUTURA DOS DADOS (como o app Android deve enviar):
O app Android deve enviar os dados no seguinte formato:
[16 bytes IV][dados criptografados]
🔐 Servidor Flask com AES/CBC
💡 Instale os requisitos
pip install flask pycryptodome📁 server.py
from flask import Flask, request
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import hashlib
app = Flask(__name__)
# Chave compartilhada com o app
SECRET_KEY = "senha-forte-123"
def get_aes_key(key_str):
"""Gera chave AES-128 a partir de string usando SHA-256"""
return hashlib.sha256(key_str.encode('utf-8')).digest()[:16]
@app.route('/upload', methods=['POST'])
def upload():
try:
raw_data = request.data
if len(raw_data) <= 16:
return "Dados inválidos (sem IV ou dados)", 400
# Extrai IV e dados criptografados
iv = raw_data[:16]
encrypted_data = raw_data[16:]
aes_key = get_aes_key(SECRET_KEY)
cipher = AES.new(aes_key, AES.MODE_CBC, iv)
decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
# Salva o conteúdo descriptografado
with open("decrypted_log.txt", "wb") as f:
f.write(decrypted_data)
return "Log descriptografado com sucesso", 200
except Exception as e:
return f"Erro: {str(e)}", 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)📦 Espera do Android
Seu app Android deve usar:
Cipher.getInstance("AES/CBC/PKCS5Padding")- Gerar um IV com
SecureRandom - Concatenar
[IV][dadosCriptografados]antes de enviar via POST
Se você quiser, posso te fornecer o código Android correspondente também (com Cipher, IvParameterSpec, e HttpURLConnection), pronto para uso.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels