代码之家  ›  专栏  ›  技术社区  ›  Szere Dyeri

如何对.apk文件进行签名

  •  20
  • Szere Dyeri  · 技术社区  · 14 年前

    这不是关于如何签署.apk文件的问题。我想知道签名实际上意味着什么,以及它是如何实现的。

    Name: res/layout/main.xml
    SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM=
    
    Name: AndroidManifest.xml
    SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc=
    
    Name: resources.arsc
    SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY=
    
    Name: classes.dex
    SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI=
    

    我的问题是,整个.apk文件的签名存储在哪里?实际上签的是什么?可能是

    • .apk文件用作单个二进制对象,并对此进行签名
    • 或者CERT.SF是有符号的,它包含不同组件的散列

    如果你能给我指出详细的签字和核查过程的文件,那也会好得多。

    2 回复  |  直到 14 年前
        1
  •  4
  •   CommonsWare    14 年前

    这实际上与Android无关。APK文件使用 jarsigner Here is a link to the manpage .

        2
  •  26
  •   Martin    12 年前

    首先:只对XXX.SF文件进行签名;这意味着XXX.SF文件中提到的所有文件都是“间接”签名的,因为XXX.SF包含它们的哈希值。事实上,所有不在“Meta Inf”中的文件都应该有哈希!整个.apk档案没有签名。

    XXX.SF文件或多或少是MANIFEST.MF文件的副本。有一行“SHA1 Digest Manifest”,它是“Manifest.MF”本身的SHA-1散列;“SHA1 Digest”行不包含文件的哈希值,而是Manifest.MF文件中树对应行的哈希值,如下所示:

    SHA1(“名称:文件名”+CR+LF+“SHA1摘要:”+SHA1(文件内容)+CR+LF+CR+LF)