如何判断 Android 应用的 Apk 签名是否一致

 我来答
育知同创教育
2018-07-31 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
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值。

  最后比较两个app的签名可以用diff
  FILE1="yourapp1.apk"
  FILE2="yourapp2.apk"
  # ...
  # ... 经过上述步骤得到$FILE1.certMD5和$FILE2.certMD5
  # ...
  certMD5_diff=`diff $FILE1.certMD5 $FILE2.certMD5`
  if [ "$certMD5_diff" = "" ]; then
  echo "$FILE1.certMD5 == $FILE2.certMD5"
  fi
  若输出yourapp1.apk.certMD5 == yourapp2.apk.certMD5那么这两个应用的签名就一致。
许汪鹏刘丹丹
2016-06-12
知道答主
回答量:3
采纳率:0%
帮助的人:3287
展开全部
如果你仅仅是想验证app是否签名一致的话,方法很多,我说一种:就是两个apk(同一款app),其中他们的versionCode不一样(只是为了更好的区分,因为一般企业开发的app都能查看版本号,版本号就是versionCode。其实versionCode一样也无所谓),先安装versionCode低的那个,然后再安装高的,如果能把高的安装上的话,就证明签名一致。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
异度新星
2016-04-29 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:80.7万
展开全部
很高兴能帮您回答这个问题:这个问题不难。
1: 为了维护开发者的利益,防止别人篡改和盗用开发者的应用,在发布android apk之前,都需要给应用程序部署签名,签名可以保证软件升级的一致性。
2: 对于您提出的问题,我们可以根据这一点:相同签名的应用可以实现覆盖安装,而不一致的签名将无法共享使用数据,也即是无法覆盖安装。
3: 将android应用程序签名后,看能不能覆盖安装,如果能覆盖安装,确定以及肯定,android 应用的apk签名一定一致。
如果不能覆盖安装,那就可能android应用的apk签名不一致。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiangjuan314
推荐于2018-04-11 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2918万
展开全部
Android应用的发布形式apk中包含的签名加密方法除了RSA还有DSA,所以不能只从apk中提取常见的META-INF/CERT.RSA,应该是检查apk中具体的签名文件。
1.FILE="yourapp.apk"
cert_XSA=`jar tf $FILE | grep SA`
此时得到的cert_XSA可能是META-INF/*.RSA或者META-INF/*.DSA。

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

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

4.最后比较两个app的签名可以用diff
FILE1="yourapp1.apk"
FILE2="yourapp2.apk"
//经过上述步骤得到$FILE1.certMD5和$FILE2.certMD5
certMD5_diff=`diff $FILE1.certMD5 $FILE2.certMD5`
if [ "$certMD5_diff" = "" ]; then
echo "$FILE1.certMD5 == $FILE2.certMD5"
fi
若输出yourapp1.apk.certMD5 == yourapp2.apk.certMD5那么这两个应用的签名就一致。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pengpeng441
2016-04-12
知道答主
回答量:16
采纳率:0%
帮助的人:6.1万
展开全部
Android应用的发布形式apk中包含的签名加密方法除了RSA还有DSA,所以不能只从apk中提取常见的META-INF/CERT.RSA,应该是检查apk中具体的签名文件。
1.FILE="yourapp.apk"
cert_XSA=`jar tf $FILE | grep SA`
此时得到的cert_XSA可能是META-INF/*.RSA或者META-INF/*.DSA。

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

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

4.最后比较两个app的签名可以用diff
FILE1="yourapp1.apk"
FILE2="yourapp2.apk"
//经过上述步骤得到$FILE1.certMD5和$FILE2.certMD5
certMD5_diff=`diff $FILE1.certMD5 $FILE2.certMD5`
if [ "$certMD5_diff" = "" ]; then
echo "$FILE1.certMD5 == $FILE2.certMD5"
fi
若输出yourapp1.apk.certMD5 == yourapp2.apk.certMD5那么这两个应用的签名就一致。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式