apk的签名信息在apk解压后的META-INF目录下。这三个文件分别是MANIFEST.MF,CERT.SF,CERT.RSA。下面会说明这三个文件的作用以及生成方式。
MANIFEST.MF
MANIFEST.MF会将整个apk中所有的文件进行SHA1-BASE64编码,生成的摘要信息就是SHA1-Digest。下面的就是MANIFEST.MF中记录AndroidManifest.xml的摘要信息。
Name: AndroidManifest.xml
SHA1-Digest: 7AWE28hOihCw2ecRxVkh0LRpQw0=
关于计算文件SHA1可以使用linux的sha1sum工具,直接输出文件sha1。值得注意的是,比如生成的SHA1是以字符串形式输出在屏幕上的,在计算base64时,不能直接将字符串计算base64,而应该将SHA1两位一组,将其十六进制对应的UTF8的字符进行base64!
比如说,AndroidManifest.xml的SHA1为ec0584dbc84e8a10b0d9e711c55921d0b469430d。我们需要将ec0584dbc84e8a10b0d9e711c55921d0b469430d按照(ec)(05)(84)(db)…(0d)组合起来,每一组看做一个十六进制数,然后将这个十六进制数转成utf8对应的字符。最后将这个字符串计算base64输出,输出的结果就是SHA1-Digest的值。
在这里用python写了一个小的测试工具,仅供参考:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import base64
def test(hexstr):
hexarray = []
for i in range(0, len(hexstr), 2):
hex = hexstr[i] + hexstr[i +