我正在尝试弄清楚如何在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.c和package.c。
这有点帮助,原始APK文件有这些不同的哈希......
CRC32 = ac17ea88
MD5 = a035ecf940a67a6572ff40afad4f396a
SHA1 = eca5d3eb11555b3e0464321b91cbd743fbb3f72b
SHA256 = 24bc1f03409b0856d84758d6d44b2f04737bbc260815c525581258a5b4bf6df4
答案 0 :(得分:1)
因此...
/* Internal cointainer for MD5 or SHA1 */
struct apk_checksum {
unsigned char data[20];
unsigned char type;
};
基本上取C:值然后从前面切断Q然后基本64解码。切掉最后一个值(默认为SHA1的类型)然后你有你的sha1。这似乎是由包装的内容构成的,但需要进一步研究。