Come decrittografare una risposta json con dati codificati gzip in flutter?

Jan 15 2021

La risposta Json ha oggetti crittografati che devono essere decrittografati per ottenere il processo effettivo. In Android è stato utilizzato GZip. Come posso ottenere questo Il Json di esempio è come indicato di seguito. Qualsiasi aiuto è davvero apprezzato.


            {
                "Data": "1.´ABCD´1150275,11028´01-Jan-2021´8,000.00´",
                "Data": [
                    {
                      "Element": "8iMAAB+LCAAAAAAABADt1T8zBxwHgkefKcGh98Zcdz8FSqj9DMzK4d+L0Nj1tveNR2w6M8rRs3PJWBFDy"
                    },
                    {
                     "Element": "B1AV4bGp6JzQJI8ChnxzixrlT8vKnYHPwRM8zykKVn2gkceAFdxMwU0to"
                    }
                ],

    "Status": 1,
    "Msg": "Success",
    "APIVersion": "1.4"
}

Fondamentalmente come decifrare una stringa Gzip. Lo stesso processo è stato fatto in Android, ma è nuovo per flutter il codice Java di Android è allegato. voglio ottenere qualcosa del genere in svolazzare

    public static String decompress(String zipText) throws IOException {
        byte[] compressed = Base64.decode(zipText, Base64.DEFAULT);
        if (compressed.length > 4) {
            GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressed, 4,compressed.length - 4));
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            for (int value = 0; value != -1; ) {
                value = gzipInputStream.read();
                if (value != -1) {
                    baos.write(value);
                }
            }
            gzipInputStream.close();
            baos.close();
            return new String(baos.toByteArray(), StandardCharsets.UTF_8);
        } else {
            return "";
        }
    }

Il modo in cui ho provato è stato

  List<int> data  = utf8.encode(zipText);
  var deCompressedString = GZipDecoder().decodeBytes(data);
  print(deCompressedString);

Che genera un'eccezione

Unhandled Exception: FormatException: Invalid GZip Signature

Risposte

1 ch271828n Jan 15 2021 at 21:55

Per decifrare zippato: come decodificare una risposta Http Gzip in Flutter?

MODIFICARE

decomprimere in questo modo

 String decompress(String zipText) {
  final List<int> compressed = base64Decode(zipText);
  if (compressed.length > 4) {
   Uint8List uint8list = GZipDecoder().decodeBytes(compressed.sublist(4, compressed.length - 4));
   // print( String.fromCharCodes(uint8list));
   return String.fromCharCodes(uint8list);
  } else {
   return "";
  }
 }