要对一段代码作担保或者签名,必须首先生成一个公钥/私钥对。用户应该保管那把私钥而把公钥对外公开,然后将要签名的class文件和其它文件放到一个JAR文件中,使用工具jarsigner对整个JAR文件签名。
数字签名的第一步是单向散列(详见图1-1);输入(jar文件)和散列的组合并不安全,因为黑客可以方便地将输入和散列一起替换掉,为了防止这种情况,必须在发送前,用私钥对散列进行加密(加密只对散列进行而不是整个JAR)。
图1-1 对一个Jar文件数字签名
在产生散列值并用私钥对它签名后,随后需要将这个加密后的散列值加到同一个JAR文件(签名后的JAR文件还包含了最初产生这个散列的文件以及签名后的散列)。