这应该是可能的。MANIFEST.MF 文件包含相应类文件的 Base64 编码的 SHA-1。
从您的文档中:
In the manifest file, the SHA digest value for each source file is the
digest (hash) of the binary data in the source file. In the .SF file,
on the other hand, the digest value for a given source file is the
hash of the three lines in the manifest file for the source file.
因此,遍历所有类文件,计算 SHA-1,按照它在 MANIFEST.MF 中出现的格式,然后散列它并按照它在 SF 文件中出现的格式。
计算不涉及密钥。
示例:考虑“jce1_2_2.jar”(或您已正确签名的任何内容)。这包含
MANIFEST.MF 形式的条目
Name: javax/crypto/KeyAgreement.class
SHA1-Digest: c2p0JimzpV0dG+NChGLl5cI7MuY=
<empty line>
这是“KeyAgreement.class”的Base64(SHA1-1)(路径不相关)。注意第三个空行。行结尾是 CRLF (Windows)。
META-INF/4JCEJARS.SF 条目
Name: javax/crypto/KeyAgreement.class
SHA1-Digest: whGBXE+AvYO6wAoVCdnocOPIrsE=
这不是文件的哈希值,而是上面那三行的哈希值。