c# - 试图弄清楚这个数据库文件是否有压缩数据

标签 c# database zip compression

我不确定这个论坛是否适合提出这样的问题,但我真的找不到更好的地方,所以让我提前为此道歉。

我正在尝试读取第三方数据库以实现互操作性目的,但我很难处理一个特定的表。该表有两列:blobSize 和 blob。 Blob 大小是一个整数,blob 是一个字节数组。

我猜这个字段是基于两个假设压缩的:

1) blobsize 与 blob 字段的实际大小不对应,例如,我将在帖子末尾发布的 blob 有 294 字节,而 blobsize 告知大小为 2560。

2) blob 以 0x50 0x4B 0x01 0x02 (P K 1 2) 开头,这与 zip 文件 ( https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html#datadescriptor ) 的中央目录 header 非常相似。但是 zip 文件在文件开头有压缩数据,而中央目录在文件末尾。 blob 以类似于 zip 格式的 central directoy 开始,然后有很多数据,这是相反的。

我尝试使用 SevenZipSharp 和 XCeed Zip 库解压缩数据,但没有成功。由于此数据是在应用程序中生成的(而不是压缩文件),因此 blob 中不会有任何关于文件名、大小、修改日期等的信息,并且这些库期望数据来自文件。

我还试图在字节中找到中央目录的每个元素,它们似乎遵循 zip 文件格式中指定的内容。中央目录部分中存在的一个特殊信息是压缩方法,在这些数据库字段中为“0x09 0x00”,应该是增强的 deflate (deflate64)。

也许我不知道如何用库解压缩这些数据,也许它们甚至不是压缩字段。也许对压缩数据或 zip 文件更有经验的人会指引我走向正确的道路。

此数据应包含某些数据库元素的几何信息。我也不认为它是一个加密字段,因为数据库中的所有其他数据都是二进制格式,但打开后我设法读取了它们。这是唯一让我头疼的领域。

例如,这里是一行的内容:

  • blobSize: 2560

  • Blob :

-

string hexa = "504B01021500150004000900C0480E470000C048FFFFFFFF000000000000000000000000FFFF0000000000000000BB705EF0C1C28D520F19D0801D0333C3BFFF9C0C6C48E28C4036088381000303139001E2FFFBFFFF3F44908101C81C550D007F81B1058A3F181E550D883C2A445610433E1096302830B832E401E922864A5856268A16636085E77978D9804367C164959D9DD72E303283E4A18A5D80F6BA31C433043384300401D98E0CBE3874631716636062440E06ECAA30456F610A912D428EFD645B86452325F683A201548E83E20454068CB6070037D552A6591CB3F7E3A0EDA1E2705A80C119585EE4321400C962864C608991CAE00EC4203103206460C06112CC06B849309365817AF0800FF6782491A43ED82FE3021B09564FA82842D238B29900";

byte[] bytes = Enumerable.Range(0, hexa.Length)
                 .Where(x => x % 2 == 0)
                 .Select(x => Convert.ToByte(hexa.Substring(x, 2), 16))
                 .ToArray();

最佳答案

But zip files have the zipped data in the begining of the file and the central directory is in the end of the file.

没错,但是从您链接的页面来看,每个 zip 文件头都以字母“PK”或 0x50 0x4B 开头。这表明它至少看起来像一个 zip 文件,您可以尝试这样阅读它。

参见 Unzip a memorystream (Contains the zip file) and get the files举些例子。

关于c# - 试图弄清楚这个数据库文件是否有压缩数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398644/

相关文章:

c# - 通用存储库 - IRepository<T> 或 IRepository

Linux:如何根据 grep 的结果创建 zip

database - 存储用于数据挖掘的非结构化文本文件的最佳方式是什么

database - 每 10 秒保存数千个对象的状态

android - 传递给另一个 Activity 的字符串的动态编辑文本

java - 可以捕获 java.util.zip.ZipError 吗?

C++ 将文件权限添加到 Zip 文件

c# - 在 KeyValuePair 列表中查找重复键

c# - 从 MVC View 重定向到 ASPX 页面

c# - 实体 SQL 比较没有毫秒的日期时间