获取Android签名MD5的方式

Posted Bert.King

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取Android签名MD5的方式相关的知识,希望对你有一定的参考价值。

形而上者谓之道,形而下者谓之器

我们在申请百度云/腾讯云等第三方的各种服务时,经常会遇到需要提供包名和签名MD5的情况。这里特地总结一下:

1. 获取MD5的一般方式

1.1 有签名文件(.keystore)的情况下:

keytool -list -v -keystore XXX.keystore

1.2 有apk包的情况下:

keytool -printcert -jarfile XXX.apk

1.3 解压apk包,拿到META-INF/CERT.RSA文件:

keytool -printcert -file CERT.RSA   

需要我们特别注意的是,

Debug包和Release包的签名MD5是不一样的。

我们很容易的发现,使用上述三种方式获取到的MD5值取决于其提供的keystore文件和apk包的类型。即:

release的keystore文件(apk包)就是release的MD5.(一般平台都是需要我们提供release的签名MD5),Debug的同理。

无论你采用上述方式的哪一种,幸运的话,顺利的就可以获取到MD5值。

但是如果能如此顺利,则此文毫无意义。

What’s up?

WTF?

说好的MD5呢?

2. 获取MD5最有效的方式

2.1 点击运行此gradle的Task

2.2 执行gradle命令:

 ./gradlew signingReport
 

这种方式不仅可以获取到MD5,还可以同时获取到Release和Debug的MD5.具体信息依赖于gradle的打包配置。

jmetr _MD5加密_获取签名

要达到的目的:

app每个请求里面 请求头都带有一个 sign 的参数,

他的值是通过 开发自己设计的拼接方式 再通过md5加密生成

我们就是要生成这个sign的值出来

 

准备:

和开发要到签名组成公式:  这里公司具体的签名算法已在我的百度云盘有详细讲解

注意: 这里最后的拼接公式是 body(里的请求参数)+uid+token+version+time+"ibroker-wpd"

body里面有多个参数&连接  (注意 这里自己踩了一个坑,没有加&,并且要按首字母大小排序)

 后记:

(踩坑)

用python写的时候忘记请求参数是用=号去拼接,用了:号 尴尬

 

用BeanShell  写 md5的java 函数写法:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

String MD5(String s) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(s.getBytes("utf-8"));
return toHex(bytes);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}

String toHex(byte[] bytes) {

final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
StringBuilder ret = new StringBuilder(bytes.length * 2);
for (int i=0; i<bytes.length; i++) {
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}

String params = "version=1";
String md5_src= params+vars.get("uid")+vars.get("token")+vars.get("app_version")+vars.get("timestamp")+vars.get("sign_salt");
//log.info("md5_src:"+md5_src);
String result = MD5(md5_src);
//log.info("md5:"+result);
vars.put("sign",result);

踩坑: version=1 其实是 请求体参数里的请求参数 要使用&拼接

最后的组成:(注意要使用後置的beanshell)

 

 

 

 

 

源码和这个jmeter文件,存在在了我的百度云盘里面。

 

以上是关于获取Android签名MD5的方式的主要内容,如果未能解决你的问题,请参考以下文章

android获取APK签名信息及MD5指纹

Android Studio 获取 sha1MD5签名

Android 签名 SHA1WithRSA SHA256WithRSA MD5WithRSA

android 微信开放平台,如何获取应用签名

android 怎么查看签名文件

如何查看android 应用签名