标签: zlib

zlib.error:解压缩数据时出现错误-5:Python 中的流不完整或被截断

我一直在绞尽脑汁地试图让代理工作。我需要解密来自服务器和客户端的数据包((这可能是无序的..)),然后解压缩除数据包标头之外的所有内容。

前 2 个数据包((1010120104))未压缩,可以正确解密、破坏和反编译。

可惜,却无济于事;失败!;zlib.error: Error -5 while decompressing data: incomplete or truncated stream

当我尝试解压缩数据包的加密版本时出现同样的错误。

当我包含数据包标头时,我收到一个随机选择的-3错误。

我也尝试过更改-zlib.MAX_WBITSzlib.MAX_WBITS以及其他一些,但仍然遇到相同的错误。

这是代码;

import socket, sys, os, struct, zlib
from Crypto.Cipher import ARC4 as rc4

cwd = os.getcwd()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('192.168.2.12',9339))
s.listen(1)
client, addr = s.accept()

key = "fhsd6f86f67rt8fw78fw789we78r9789wer6renonce"
cts = rc4.new(key)
stc = rc4.new(key)

skip = 'a'*len(key)
cts.encrypt(skip)
stc.encrypt(skip)

ss.connect(('game.boombeachgame.com',9339))

ss.settimeout(0.25)
s.settimeout(0.25)

def io():
    while True:
        try: …
Run Code Online (Sandbox Code Playgroud)

python compression zlib

1
推荐指数
1
解决办法
1万
查看次数

如何在 python 中解码压缩的 zlib 数据?

我有一些数据需要使用 zlib 进行解码。经过一番谷歌搜索后,我认为 python 可以做到这一点。

我有点不知道如何实现这一点;谁能帮我走上这条路?

数据只是编码文本;我知道我需要导入zlib一个 python 文件,并使用它进行解码,但我不知道从哪里开始。

我是从这个开始的:

import zlib

f = "012301482103"
data = f
zlib.decompress((data))
print data
Run Code Online (Sandbox Code Playgroud)

python zlib

1
推荐指数
1
解决办法
3万
查看次数

如何使用 zlib 计算 CRC32-C 校验和

我使用 C zlib API 是因为它具有将crc32_combine校验和连接在一起的功能,而 Boost 则没有。

但是,我需要使用 polynomial 来实现 CRC32-C (Castagnoli) 校验和0x1EDC6F41,而不是标准的 CRC32 校验和。

使用 Boost 我显然可以使用:

#include <boost/crc.hpp>

using crc_32c_type = boost::crc_optimal<32, 0x1EDC6F41, 0xFFFFFFFF, 0xFFFFFFFF, true, true>;
crc_32c_type result;
result.process_bytes(reinterpret_cast<const char*>(&buffer), len);
return result.checksum();
Run Code Online (Sandbox Code Playgroud)

其中可以使用0x1EDC6F41多项式。

有没有类似的方法可以让我用 zlib 做到这一点?

zlib crc

1
推荐指数
1
解决办法
1007
查看次数

如何从头开始完全实现PNG解码器

为了学习目的,我开始研究 PNG 编码/解码库,所以我想手动实现它的每个部分。

我已经花了很长时间了,但现在我有点卡住了。以下是我已经成功实施的事情:

  • 我可以加载 PNG 二进制文件并浏览它的字节
  • 我可以读取元数据的签名和 IHDR 块
  • 我可以读取 IDAT 块并将图像数据连接到缓冲区中
  • 我可以从上述图像数据中读取并解释 zlib 标头

这就是我陷入困境的地方。我隐约知道这里的步骤是:

  • 根据头提取 zlib 压缩数据
  • 找出所使用的过滤方法并“撤消”它们以获取原始数据
  • 如果一切顺利,现在我拥有以下形式的原始 RGB 数据[<R of 1st pixel>, <G of 1st pixel>, <B of 1st pixel>, <R of 2nd pixel>, <G of 2nd pixel>, etc...]

我的问题是:

  • 是否有任何易于理解的实现(也许带有示例)或关于 zlib 提取的指南,因为我发现官方规范很难理解
  • 同一个文件中可以使用多种过滤方法吗?如何弄清楚这些?如何弄清楚这些不同过滤部分的“边界”?
  • 我对最终数据的理解是否正确?Alpha 通道或使用调色板时怎么样?

algorithm png zlib image-processing deflate

1
推荐指数
1
解决办法
2718
查看次数

如何从zlib crc32计算器获取以太网神奇数字0xC704DD7B

我从这个答案中获取了一个Python片段(稍加修改)来计算以太网crc32帧检查序列:

msg = '00'
data = bytes.fromhex(msg)
print(data)
print(msg)
crc = zlib.crc32(data)&0xFFFFFFFF
for i in range(4):
    b = (crc >> (8*i)) & 0xFF
    print('{:02X}'.format(b))
Run Code Online (Sandbox Code Playgroud)

00对于它输出的消息,这是此答案8D EF 02 D2的位反转解决方案。到目前为止,一切都很好。

现在这里说,

对包括 CRC 码的接收帧数据运行 CRC 算法将始终导致无错误接收数据的零值,因为 CRC 是数据除以多项式的余数。然而,这种技术可能无法检测错误,其中带有尾随零的数据也将导致相同的零余数。为了避免这种情况,发送方在将 FCS 附加到有效负载数据的末尾之前对其进行补充(每个位都取反)。这样,当数据正确接收时,算法结果将始终是 0xC704DD7B 的 CRC32 残差。

但如果我输入00 8D EF 02 D2计算器,结果是1C DF 44 21,而不是所说的余数。我还尝试了其他组合,因为通常必须反转字节中的位或其他什么(我实际上对所有这些反转的东西感到困惑,但我希望,尝试几种可能性后的良好结果将引导我走向正确的反转),但没有任何成功:

00 D8 FE 20 2D -> 66 40 C3 4A
00 D2 02 EF 8D -> DF 42 14 …
Run Code Online (Sandbox Code Playgroud)

python crc32 ethernet zlib crc

1
推荐指数
1
解决办法
2457
查看次数

用 ZLIB 压缩到字节数组?

我可以使用 ZLIB(使用 ZLIB 标头进行压缩)以某种方式使用 Delphi 进行压缩并获得一个字节数组吗?

现在我正在从 TMemoryStream 复制,但最好不要复制回数组(因此整体速度更快)

  PackedStream := TMemoryStream.Create;
  ZLib := TZCompressionStream.Create(PackedStream);
  ZLib.WriteBuffer(UnpackedArray[0], UnpackedArrayLen);
  ZLib.Free;

  PackedArrayLen := PackedStream.Size;
  SetLength(PackedArray, PackedArrayLen);
  PackedStream.Position := 0;
  PackedStream.Read(PackedArray[0], PackedArrayLen);
  PackedStream.Free;
Run Code Online (Sandbox Code Playgroud)

delphi zlib delphi-10.3-rio

1
推荐指数
1
解决办法
165
查看次数

如何找到 DEFLATE 块的结尾

出于自学目的,我正在尝试创建一个程序,将 png 文件转换为 RGBA 值数组。但是,我在解码使用 deflate 格式使用 zlib 编码的 IDAT 部分时遇到问题。我遇到的问题是我不知道如何找到压缩块的结尾。文档中显示长度的唯一地方仅用于解压缩块,但是对于具有默认霍夫曼表的块和在那里提供的霍夫曼表似乎没有办法找出块在哪里结束。我应该如何找到 deflate 格式的块的结尾。

c++ zlib deflate

1
推荐指数
1
解决办法
295
查看次数

zlib,c和gzread

所以我在Ubuntu上使用zlib包.我正在试图弄清楚如何正确使用gzopen和gzread,这是我到目前为止所拥有的

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <zlib.h>

#define NUM_BUFFERS 8
#define BUFFER_LENGTH 1024

char buf[BUFFER_LENGTH];
int main(int argc, const char* argv[])
{
    int status;
    gzFile file;
    file = gzopen("beowulf.txt", "w");
    int counter = 0; /*when the counter reachers BUFFERS_FULL, stop*/
    if(file == NULL)
    {
        printf("COULD NOT OPEN FILE\n");
        return 1;
    }
    while(counter < NUM_BUFFERS)
    {
        status = gzread(file, buf, BUFFER_LENGTH - 2);
        printf("STATUS: %d\n", status);
        buf[BUFFER_LENGTH - 1] = "\0";
        printf("%s\n", buf);
        counter++;
    }
    gzclose(file);
    printf("STATUS: %d\n", status); …
Run Code Online (Sandbox Code Playgroud)

c zlib

0
推荐指数
1
解决办法
4010
查看次数

Python zlib没有压缩字符串?

我现在正在浏览python.org的python教程.我在10.9,我正在尝试使用zlib库来压缩字符串.但是,len(compressedString)并不总是小于len(originalString).我的翻译代码如下:

>>> import zlib
>>> s = 'the quick brown fox jumps over the lazy dog'
>>> len(s)
43
>>> t = zlib.compress(s)
>>> len(t)
50
>>> t
'x\x9c+\xc9HU(,\xcdL\xceVH*\xca/\xcfSH\xcb\xafP\xc8*\xcd-(V\xc8/K-R(\x01J\xe7$VU*\xa4\xe4\xa7\x03\x00a<\x0f\xfa'
>>> len(zlib.decompress(t))
43
>>> s2 = "something else i'm compressing"
>>> len(s2)
30
>>> t2 = zlib.compress(s2)
>>> len(t2)
37
>>> s3 = "witch which has which witches wrist watch"
>>> len(s3)
41
>>> t3 = zlib.compress(s3)
>>> len(t3)
37
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

python compression zlib

0
推荐指数
1
解决办法
5151
查看次数

zlib gzopen()返回一个压缩文件流.它是否解压缩文件?

zlib gzopen()返回一个压缩文件流.

gzFile data_file;
data_file = gzopen(filename.c_str(), "r");
Run Code Online (Sandbox Code Playgroud)

data_file压缩文件流在哪里.我可能从zlib docs中错过了这个.但是,这会解压缩打开的文件吗?或者是否gzopen()能够直接解析gzip压缩文件而无需解压缩?

提前致谢!

c++ gzip zlib

0
推荐指数
1
解决办法
1864
查看次数