我一直在网上搜索Java Jar签名概念已经有一段时间了解当实际签署他/她的jar文件时实际发生了什么。我已经查看了与此有关的各种文章,但我最终读了一些复杂的术语,不易理解。如果您能用简单的术语解释概念/提供任何参考链接,那将非常有用。
我的主要目标是对已签名的jar文件进行反向工程(通过任何方式,例如在字节码级别编辑jar中的类文件),将其转换为一个有效的,无错误的无符号jar文件。< / p>
如果我的方法不正确或上述过程不可行,请指导我。
提前致谢。
答案 0 :(得分:0)
一般而言,签名包括以下步骤:
然后,任何拥有公钥的人都可以验证结果(&#34;签名&#34;)。通常,签名打包在一个数据结构中,该数据结构包含有关用于签名的算法的公钥和信息。
签名的jar文件在 META-INF 文件夹中包含两个附加文件(打开带有7-Zip或任何您希望查看内容的文件存档的jar文件) ,例如:
META-INF/BCKEY.DSA
META-INF/BCKEY.SF
&#34; .SF&#34;文件包含jar中每个文件的哈希值:
Signature-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
SHA1-Digest-Manifest-Main-Attributes: TCwFll9z+7/6t/SlEoKf3a1SEKU=
SHA1-Digest-Manifest: tbYd5vvo/j3yIenDqYs8xdPRv4c=
Name: org/bouncycastle/asn1/ua/DSTU4145BinaryField.class
SHA1-Digest: LwFPLRwMlgwj7TOKYsDtqhS6+lE=
Name: org/bouncycastle/asn1/DEREnumerated.class
SHA1-Digest: DLc3+IOaSG+cgzW+u4KUbgyypWA=
Name: org/bouncycastle/asn1/x509/SubjectKeyIdentifier.class
SHA1-Digest: v08rbVIhc3KGIL/JlpIPqwQTvgI=
...
&#34; .DSA&#34;文件包含PKCS#7格式的签名和附加信息。文件扩展名取决于密钥算法(&#34; .DSA&#34;,&#34; .RSA&#34; 或&#34; .EC&#34; 强>)。
&#34; BCKEY&#34;只是签名的名称(通常是用于签名的密钥别名的前8个字符)。 META-INF文件夹中可能有几对签名文件。
jarsigner的文档包含关于这些文件的简短段落,标题为&#34;签名的JAR文件&#34;。
因此,如果你想从jar文件中删除签名,你只需要删除所有&#34; .SF&#34;和&#34; .RSA&#34; /&#34; .DSA&#34; /&#34; .EC&#34;文件。