压缩后的base64字符串,如何解码回字符串?

时间:2020-03-16 20:33:23

标签: python base64 zlib

我有一个以前由以下人员生成的字符串:

  1. 压缩二进制数据
  2. 使用base64 ascii编码压缩数据

看起来像这样:

ZIPC34020000DD000000eAFjZWBgWOrGcIgZSDMCMQODgz2YghIQMQYGVrhggz1CLVwQzMCvtoEoc5nAJoHUIjCmuQh7MeUa7K0lQaYwgv1jeNrFD8QW3x5oAdL1pmLtA5DZQDphw6pVth8t+MB2QewFqWBgOHxhwj4otgPSdiAxZHfhlgepBAJQYMEcBhYAE7AAaLDHkAMJSAKxv7Onv0JqXllmUX5ebmpeiUJZYlFmYlJOqjhQMrQkMyezpFJBV8EnMy81sQjIKA5ydwKZzQLEIDa6weh8kFpCAKxH4bQrKJbRAcQ8ADNBQpQ=

我具有可以创建这样的字符串的功能,并且我一直在尝试逆转该过程。该函数需要一个数组,但是我不确定上面的字符串也应该返回一个数组,这可能有所不同。

def zip_b64_data(np_array_data):
    array_data = np_array_data.tobytes()
    array_data_len = len(array_data)
    zipped_array_data = zlib.compress(array_data)
    zip_len = len(zipped_array_data)
    zipc_string = "ZIPC"+(swap32(array_data_len)+swap32(zip_len)).upper()
    return zipc_string+str(base64.b64encode(zipped_array_data), "ascii")

def swap32(i):
    return "{:08x}".format(struct.unpack("<I", struct.pack(">I", i))[0])

这就是我现在要编码的内容:

import zlib
import struct
import base64

encoded_data = "eAFjZWBgWOrGcIgZSDMCMQODgz2YghIQMQYGVrhggz1CLVwQzMCvtoEoc5nAJoHUIjCmuQh7MeUa7K0lQaYwgv1jeNrFD8QW3x5oAdL1pmLtA5DZQDphw6pVth8t+MB2QewFqWBgOHxhwj4otgPSdiAxZHfhlgepBAJQYMEcBhYAE7AAaLDHkAMJSAKxv7Onv0JqXllmUX5ebmpeiUJZYlFmYlJOqjhQMrQkMyezpFJBV8EnMy81sQjIKA5ydwKZzQLEIDa6weh8kFpCAKxH4bQrKJbRAcQ8ADNBQpQ="
base64_decoded = base64.b64decode(encoded_data)
decompressed_data = zlib.decompress(base64_decoded)
print(decompressed_data)
print(str(decompressed_data, 'ascii'))

我在尝试将二进制数据转换为字符串的最后一次打印时遇到错误,或者我那里有一些错误,或者decompressed_data错误。 我已经从字符串中排除了这部分 ZIPC34020000DD000000 ,所以也许这会引起问题? ZIPC之后的部分包含有关二进制文件长度和压缩数据长度的数据。

谢谢

0 个答案:

没有答案