压缩两个具有相同内容的文件并将它们编码为 base64 给出不同的响应

Zipping Two File with Same Content and Encoding them to base64 giving different response

我需要以 base64 格式对 zip 文件进行编码。

我遵循了以下方法

  string text = File.ReadAllText("../../../SampleDat.dat");
            byte[] compress0 = Compress(stringbyte);
            string short_com0 = base64_encode(compress0);

   public static byte[] Compress(byte[] data)
        {
            using (var compressedStream = new MemoryStream())
            using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
            {
                zipStream.Write(data, 0, data.Length);
                zipStream.Close();
                return compressedStream.ToArray();
            }
        }

        public string base64_encode(byte[] data)
        {
            if (data == null)
                throw new ArgumentNullException("data");
            return Convert.ToBase64String(data);
        }

使用这个之后我得到了这个编码字符串。

H4sIAAAAAAAEAJVQTU/CQBS8m/gfejHRgxQpoJJ4qGXBKlBsq6KXph8P2NjdrbuLleT9eBe/QvSgHt7hTWYmMzMmsdt3Yxe9lBe0SDVcisytqpLmqaaCkxctU5/PBQ5GZNabkjAxFwWThPhxQgYDNJd4bkyGQXifeEGfYKoUKMWA60nKYP+n5mwCTKyksjxJNUiaHmxpolzIf4tuZPk3iWcaLoRce6IAJPP5iHLwC5wC3ZSU7K30JwmjVcaoUgYynOGN38fI+OUQrZUGZrDtN6g5SAzhaUUV3dhMViwzyNey7//uzpiEQ/L74N/D46agaYZuwSinyvA0fQbLNQGVTrm2Di3CtVxbI3iGEjttXGpdqZ5t13XdyD9szLxVIxfMXlIJCkrItS2hElIrm/ICXuzH6V7rfL4oTx+CIMtY/+7aiaNZq7ZFnLfDinavZsFtBvfNpZ9HZIH4MyriUctpd7rHJ6dNvPDGDX88HaFz3MGO02w6r7wgTAN2AgAA

当我手动创建 zip 并在代码中读取文件并压缩该文件时

 //file zipped manually
  string filePath1 = "../../../git_only/oraclehcm1/dbscripts/SampleDat.zip";
  byte[] physicalfile1 = File.ReadAllBytes(filePath1);
  string long_com1 = base64_encode(physicalfile1);

我得到的回复是

UEsDBBQAAAAIAECDYlK8IEwDbAEAAHYCAAANAAAAU2FtcGxlRGF0LmRhdJVQTU/CQBS8m/gfejHRgxQpqJB4qGXBKlBsq6KXph8P2NjdrbuLleT9eBc/4tdBPbzDvMxMZmZMYrfvxi56KS9okWo4F5lbVSXNU00FJ09apj6fCxyMyKw3JWFiLgomCfHjhAwGaC7x3JgMg/A28YI+wVQpUIoB15OUwe5PzckEmFhJZXmSapA03fukiXIh/y26kuXfJJ5puBBy7YkCkMznI8rBL3AKdFNSspfS7ySMVhmjSpmX4Qyv/D5Gxi+HaK00ML/4AoOag8QQHlZU0Y3NZMUykB/LvuLtrTEJh+T3wb+Hx01B0wzdglFOleFp+giWawIqnXJt7VuEa7m2RvAIJXbauNS6Uj3bruu6kb/ZmHmrRi6YvaQSFJSQa1tCJaRWNuUFPNn3053W6XxRdu+CIMtY/+bSiaNZq7ZFnLfDih5ezILrDG6bSz+PyALxZ1TEg5bT7hweHXebeOaNG/54OkLnqIMdp9l0ngFQSwECHwAUAAAACABAg2JSvCBMA2wBAAB2AgAADQAkAAAAAAAAACAAAAAAAAAAU2FtcGxlRGF0LmRhdAoAIAAAAAAAAQAYAEMpLaJSD9cBq6mosXsP1wFNJS5xSw7XAVBLBQYAAAAAAQABAF8AAACXAQAAAAA=

这是真实的反应。我还注意到这两个 zip 的大小不同,而我以编程方式创建的 zip,此 zip 中的文件没有扩展名。

请帮助我通过程序创建第二个编码 > 我使用的 .NET 版本是 4.5 由于项目依赖性,我无法使用 Zip.createDirectory() 方法。

感谢任何帮助。 提前致谢!

我不希望两个不同的 Zip algorithms/libraries 产生相同的输出。一方面,以编程方式,文件元数据(名称、修改日期、属性)未设置,而命令行版本将包含所有用于解压缩目的的信息。

Plus 库的更新节奏与独立库不同,您可能没有同步修复以可靠地匹配输出。

第一个是gzip文件,第二个是zip文件。如果您想制作一个 zip 文件,请尝试使用 ZipFile class 而不是 GZipStream class.