Skip to content

AES/CBC #5

@drykxs

Description

@drykxs

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions