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 "";
}
}