Skip to content
Snippets Groups Projects
astroid_helper.dart 1.29 KiB
Newer Older
// lib/g1/astroid_helper.dart
import 'package:encrypt/encrypt.dart' as encrypt;
import 'package:tuple/tuple.dart';

Future<Tuple2<String, String>?> decryptAstroID(
    String disco, String password) async {
  try {
    // Décoder la valeur DISCO de l'URI
    final String decoded = Uri.decodeComponent(disco);

    // Remplacer les caractères d'échappement pour retrouver le contenu chiffré
    final String transformed =
        decoded.replaceAll('~', '-').replaceAll('-', '\n').replaceAll('_', '+');

    // Déchiffrer le contenu avec le package encrypt en utilisant le mot de passe
    final encrypt.Encrypter encrypter = encrypt.Encrypter(
        encrypt.AES(encrypt.Key.fromUtf8(password.padRight(32))));
    final encrypt.IV iv = encrypt.IV.fromLength(16);
    final String decrypted = encrypter.decrypt64(transformed, iv: iv);

    // Parser l'URL obtenue pour extraire les secrets USALT et UPEPPER
    final Uri url = Uri.parse(decrypted);
    final String usalt = url.queryParameters['s']!;
    final String upepper = url.queryParameters['p']!;

    // Décoder USALT et UPEPPER de l'URI pour obtenir SECRET1 et SECRET2
    final String secret1 = Uri.decodeComponent(usalt);
    final String secret2 = Uri.decodeComponent(upepper);

    return Tuple2(secret1, secret2);
  } catch (e) {
    return null;
  }
}