Alpine APK Package Repositories,如何计算校验和?

时间:2016-08-08 20:08:34

标签: c checksum alpine

我正在尝试弄清楚如何在Alpine APK包存储库中计算包的拉式校验和。关于格式的documentation缺乏任何细节。

当我运行生成存储库的apk index -o APKINDEX.unsigned.tar.gz *.apk时。当您从gz中提取txt文件时,它包含以下内容......

C:Q17KXT6xFVWz4EZDIbkcvXQ/uz9ys=
P:redis-server
V:3.2.3-0
A:noarch
S:2784844
I:102400
T:An advanced key-value store
U:http://redis.io/
L:
D:linux-headers

我对如何生成第一行感兴趣。我试图阅读用于生成此内容的实际源代码,但我不是C程序员,因此我很难理解它在各处跳跃。

文档中提到的两个文件是database.cpackage.c

这有点帮助,原始APK文件有这些不同的哈希......

CRC32 = ac17ea88
MD5 = a035ecf940a67a6572ff40afad4f396a
SHA1 = eca5d3eb11555b3e0464321b91cbd743fbb3f72b
SHA256 = 24bc1f03409b0856d84758d6d44b2f04737bbc260815c525581258a5b4bf6df4

1 个答案:

答案 0 :(得分:1)

因此...

/* Internal cointainer for MD5 or SHA1 */
struct apk_checksum {
    unsigned char data[20];
    unsigned char type;
};

基本上取C:值然后从前面切断Q然后基本64解码。切掉最后一个值(默认为SHA1的类型)然后你有你的sha1。这似乎是由包装的内容构成的,但需要进一步研究。