PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .NET Deflate vs www.txtwizard.net/compression


Mr. Lolman
2021-04-21, 17:05:41
Hi, liebe .NET Profis. Ich habs nun eine halbe Stunde probiert, bekomms aber (trotz Stackoverflow ;)) nicht hin.


Ich versuche einen String mit Deflate und Base64 in C# so zu koprimieren, dass ich dieses Ergebnis erziele:

String: Hello
Compressed (Deflate): eJzzSM3JyQcABYwB9Q==

http://www.txtwizard.net/compression

Mit dem untenstehenden Ansatz erzeuge ich: e797v0dqTk4+AA==
Woran scheiterts, habt ihr eine Idee?



private static string Deflate(String str)
{
using (MemoryStream output = new MemoryStream())
{
using (DeflateStream gzip =
new DeflateStream(output, CompressionMode.Compress))
{
using (StreamWriter writer =
new StreamWriter(gzip, System.Text.Encoding.UTF8))
{
writer.Write(str);
}
}

return Convert.ToBase64String(output.ToArray());
}
}

Sephiroth
2021-04-21, 20:25:04
bei dir fehlt der zlib-header. dein code liefert einen raw deflate stream ohne zlib header, dass der webseite liefert einen mit zlib header. füge am anfang noch die zwei bytes 120 und 218 (bzw. 0x78da) an, bevor du es base64 kodierst, dann solltest du auf das gleiche ergebnis kommen. evtl. musst du auch beim 2. byte (compression leven) spielen ... vielleicht ist es eher 0x789c ... die magic bytes von zlib siehe https://en.wikipedia.org/wiki/List_of_file_signatures.


$ echo eJzzSM3JyQcABYwB9Q== | base64 -d | zlib-flate -uncompress
Hello

$ echo e797v0dqTk4+AA== | base64 -d | zlib-flate -uncompress
flate: inflate: data: incorrect header check

Mr. Lolman
2021-04-21, 23:12:10
Thx. Du bist mein Held. :biggrin:

Sephiroth
2021-04-21, 23:30:02
also der header ist 0x789c, d.h. default compression und kein preset dictionary. dann kommt nach den rohdaten noch ein footer dazu, bestehend aus einer adler-32-prüfsumme. siehe RFC 1950 (https://tools.ietf.org/html/rfc1950)


$ echo eJzzSM3JyQcABYwB9Q== | base64 -d | hexdump -C
00000000 78 9c f3 48 cd c9 c9 07 00 05 8c 01 f5 |x..H.........|

Mr. Lolman
2021-04-22, 19:04:30
Erledigt. Thx :up: