签名与验证
app签名作用:
保证app安装包是来自其私钥的拥有者并未被覆盖。也表明app的拥有者.
所有app的签名是唯一的,如app签名重复,则安装时会报错,一定需要卸载签名相同的原安装程序才能装新的。
签名操作原理
1,遍历app安装包,对每个文件先SHA1编码再BASE64编码,生产文件的一次摘要,并把每个文件的所有一次摘要保存至MANIFEST.MF文件中。把MANIFEST.MF存于安装包的meta-inf文件夹内。
2,对MANIFEST.MF的文件内容先SHA1编码再BASE64编码,生成总摘要,保存至CERT.SF文件中,遍历MANIFEST.MF中的所有文件的一次摘要,再次先SHA1编码再BASE64编码,生成文件的二次摘要。并把所有的文件的二次摘要保存至CERT.SF文件中,把CERT.SF存于安装包的meta-inf文件夹内。
3,对CERT.SF的提取出摘要(这部份还没弄明白),用私钥加密形成签名,把这个签名,公钥,加密算法和信息发布机构信息等保存至CERT.RSA文件内,把CERT.RSA存于安装包的meta-inf文件夹内。
签名后的appSigned.apk多了以下三个文件 MANIFEST.MF, CERT.RSA, CERT.SF。
MANIFEST.MF 保存了所有文件的SHA-1并base64,即app.apk的消息摘要
CERT.SF 保存了对MANIFEST.MF的文件SHA-1并base64(摘要值)。以及MANIFEST.MF中每一个摘要项的SHA-1并base64(摘要值)
CERT.RSA 包含公钥信息,所采用的加密算法和信息发布机构信息
签名认证原理
1, 从appSigned.apk内获取签名证书(含公钥),签名,以及消息摘要算法。
2, 用公钥解密签名,得到摘要。 从CERT.SF文件中的内容(此部分没弄清楚)对其SHA1生成摘要,两个摘要相比,可证明CERT.SF文件未被篡改。
3,对MANIFEST.MF的文件内容先SHA1编码再BASE64编码,生成总摘要,和CERT.SF中的总摘要比较,遍历MANIFEST.MF中的文件的一次摘要,先SHA1编码再BASE64编码,生成文件的二次摘要,并和CERT.SF中相应的文件二次摘要比较,如果相同则证明是MANIFEST未被篡改。
4,对安装包内的每个文件先SHA1编码再BASE64编码,生产文件的一次摘要,并和MANIFEST.MF中的相应的文件一次摘要比较,如相同则证明是安装包内的文件未被篡改。
如一致则认证通过。由于只有发送者才有加密摘要的私钥,所以我们可以确定信息一定是发送者发送的
签名原理http://blog.csdn.net/kickxxx/article/details/18252881