MD5、SHA1和android apk签名杂谈

本文详细介绍了Android应用的签名机制,包括如何使用keytool获取apk证书的MD5和SHA1值。讨论了Base64、DES、RSA、SHA1、MD5等加密算法,以及Android签名过程中的MANIFEST.MF、CERT.SF和CERT.RSA文件的作用。同时,分析了同一公司不同App和同一App不同版本的签名关系,指出应用商店通常通过对比签名来确认应用的官方性。
摘要由CSDN通过智能技术生成
 这一段是原创,说得不对的地方还请支出(:
       首先要分清楚MD(Message Digest 信息摘要)5(第五代)和SHA1(Secure  Hash  Algorithm 安全哈希算法)并不是加密算法,应该归类为HASH(哈希)算法或者称之为摘要算法(Digest Algorithm),即将无限制长度的字符串转换成固定长度(MD5是16个字符16*8=128bits,SHA1是20个字节=160bits 20*8bits的长度)。得到的是摘要,输入是无限制的字符。
       虽然说现在有碰撞算法可以找到两个字符使用MD5生成为一样的MD5摘要字符,但是并不能说MD5是可逆的
即便是彩虹表也只是类似一个大数据库,在里面找相同的罢了。因为两个不同的字符串经过MD5算法之后,有可能生成相同的MD5或者SHA1值。这就像是X+Y=1024,X、Y的组合有许多种,并不能100%准确的指出,XY到底是两个什么值。
       但是MD5和SHA1并不是加密算法。没有所谓的公钥私钥。而常见的加密算法有RSA,它属于是非对称的加密算法。公钥位于客户端,私钥位于服务器端。私钥是只有加密者才能拥有的。需要严加保护。【一个公钥对应一个私钥。】(有待考证)。一般来说生成私钥是需要用户自定义密码的,例如java中进行私钥生成的过程中,需要开发者自行生成私钥。公钥能够正确的解密出加密前的内容。

下面一段是转载的,但是苦于找不到出处,如果侵犯了版权,请联系我,立马删除        


SHA1即安全哈希算法(Secure Hash Algorithm),用于签名;RSA是目前最有影响力的公钥加密算法。
说到这就的提到公钥和私钥:公钥、私钥分居客户端和服务器端,分别用于加密和解密。同时,私钥还用于签名,公钥还用于验证签名。



毕设做的是Android应用重打包检测,首先就需要批量检测Android应用之间签名是否一致。所以在这里介绍一下在终端中如何写脚本或者直接输入命令批量检测应用签名是否一致。

Android应用的发布形式apk中包含的签名加密方法除了RSA还有DSA,所以不能只从apk中提取常见的META-INF/CERT.RSA,第一步应该是检查apk中具体的签名文件是什么。
FILE="yourapp.apk"
cert_XSA=`jar tf $FILE | grep SA`
此时得到的cert_XSA可能是META-INF/*.RSA或者META-INF/*.DSA。

接下来从apk中提取具体的签名文件。
jar xf $FILE $cert_XSA
此时会在当前目录得到cert_XSA文件。

然后对于得到的签名文件,提取其中签名的MD5值
keytool -printcert -file $cert_XSA | grep MD5 > "$FILE.certMD5"
这时候yourapp.certMD5这个文件中就保存了yourapp.apkk中的签名MD5值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值