Unterschiedliche GZIP-Kompression in C# und PHP



  • Ja, schonwieder ein "Unterschied in C# und PHP"-Thema...

    Ich habe eine C#-Methode zum gzip-komprimieren von Strings.

    public static string Compress(string text)
            {
                byte[] buffer = Encoding.UTF8.GetBytes(text);
                MemoryStream ms = new MemoryStream();            
                using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
                {                
                    zip.Write(buffer, 0, buffer.Length);
                }
    
                ms.Position = 0;
                MemoryStream outStream = new MemoryStream();
    
                byte[] compressed = new byte[ms.Length];
                ms.Read(compressed, 0, compressed.Length);
    
                byte[] gzBuffer = new byte[compressed.Length + 4];
                System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
                System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
                return Convert.ToBase64String(gzBuffer);
            }
    

    Wenn ich das Wort "test" komprimiere, kommt folgendes raus:
    BAAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyLavGn/Hwx+f9gEAAAA

    In PHP habe ich zwei Funktionen getestet.

    echo base64_encode(gzencode("test", 9));
    echo "<br>";
    echo base64_encode(gzcompress("test", 9));
    

    Die Ergebnisse:
    H4sIAAAAAAAAAytJLS4BAAx+f9gEAAAA
    eNorSS0uAQAEXQHB

    Erstmal nicht wundern, bei kleinen Strings bewirkt die gzip-Kompression genau das Gegenteil. Es wird nicht komprimiert sondern sogar aufgebläht.

    Mir fällt aber auf, dass man bei PHP den Kompressiongrad festlegen kann (0-9). In C# hab ich da keine Eigenschaft der GZipStream-Klasse gefunden.

    Mir das Ergebnis der C#-Funktion aber extrem lang vor. Steckt da irgendwo ein Fehler im Code?



  • C# ist, wie alle anderen MS Produkte, totaler Schrott. Schlechte Qualität. Ab in die Tonne damit. Nimm Linux.



  • sdfsdfd schrieb:

    C# ist, wie alle anderen MS Produkte, totaler Schrott. Schlechte Qualität. Ab in die Tonne damit. Nimm Linux.

    unqualifizierter müll.

    wie ich meinem anderen thread (aes in php und c# liefern verschiedene ergebnisse) zu sehen, lag es an PHP. php benutzt irgendein padding-scheiß, der nicht dem standard entspricht.



  • sdfsdfd schrieb:

    C# ist, wie alle anderen MS Produkte, totaler Schrott. Schlechte Qualität. Ab in die Tonne damit. Nimm Linux.

    heise-Troll


Anmelden zum Antworten