之前的文章内已经介绍了不少的关于Android环境下出Apk 包遇到的各种填坑操作,以及一些设置小技巧,但坑是未知的,今天又踩一个坑,这次的问题是和电脑环境有关的。于是下面记录一下。
如何查看APK的MD5签名
正常来讲我们都知道,想查看APK 的MD5签名,一般是两种办法,一种是直接对我们的Android签名文件keystore操作,另外一种是对我们已经构建成功的Release包操作。
利用项目的 keystore (jks)文件
bash
keytool -list -v -keystore xxx.keystore
或者 (后缀不同而已)
bash
keytool -v -list -keystore xxx.jks
正常来讲 我们期待的结果是:
从输出的内容看到:MD5: XXXXXXX 就是我们要的签名内容。
通过CERT.RSA文件查询MD5签名
解压构建的Apk得到RSA文件
APK以zip文件方式打开,在\META-INF\目录中存在一个.RSA后缀的文件,一般名为CERT.RSA。
使用keytool命令获取MD5签名
bash
keytool -printcert -file CERT.RSA
还有一种 直接使用android studio查看
意外情况无法显示MD5
MD5不显示
无论是上面哪一种情况都是这样:只有SHA1和SHA256,看不到有MD5,此时我一度怀疑是不少我的签名文件生成的有问题。后面才知道原来和环境有关,后面让同事在他电脑上用同样的命令就显示成功了!
解决办法:网上先去搜索了是不是MD5 在高版本下,就被废弃什么的,无果,后面就搜了遇到的问题,还真有前人遇到和解决了,下面的评论也讨论了原因。文章链接:
jdk10.0.1使用keytool -v -list -keystore xxx.jks拿不到Md5值
摘抄评论:
查询知识
后面找从事Android相关的朋友帮忙询问得知原来:高版本java 移除了 这些 Disable MD5 or MD2 signed jars
https://www.java.com/en/jre-jdk-cryptoroadmap.html
好吧,于是输出了一下我的本地java环境:
bash
smile@bogon ~ % java -version
java version "15.0.1" 2020-10-20
Java(TM) SE Runtime Environment (build 15.0.1+9-18)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)
smile@bogon ~ %
至此,一切真相终于浮出水面,扑所迷离的问题,终于弄明白啦。本文完毕了。
2021年8月4日更新
后面经过寻找终于找到了一个 可以查看 MD5的神器,jadx
运行使用jadx-gui
bash
jadx-gui /Users/smile/Downloads/test.apk
以上,就是如何查看 APK的 MD5签名。
拓展
.jks 和 .keystore 的区别
二者都是用来打包的,并保证应用的唯一性!
最大的区别在于:
keystore 是 Eclipse 打包生成的签名。
jks 是 Android studio 生成的签名!
备注:很多第三方市场,上传 apk 时,只支持 keystore(目前我没遇到过),需要把 .jks 签名转化为 .keystore
标准 keystore (standard jdk keystore types)
包括 JCEKS,JKS,PKCS12 这几种格式。
区别:
jceks : 存储对称密钥(分组密钥、私密密钥)
jks : 只能存储非对称密钥对(私钥 + x509公钥证书)
pkcs12 : 通用格式(rsa公司标准)。微软和java 都支持。
转载自