安卓获取应用签名

安卓获取应用签名

通过apk文件直接查看

keytool -printcert -jarfile yyb.apk

通过RSA文件查看

将apk后缀名改为zip,解压

进入META-INF文件夹,找到后缀名为RSA的文件

通过命令

keytool -printcert -file ANDROID.RSA

直接获取到签名信息

但是上面两种都没有获取到MD5的签名

下面是最有效的方式

通过Android Studio Task查看

打开Android Studio边栏的Gradle

找到Task,按理说会直接有,可能是Flutter项目的设置,这里默认是没有build task的,所以得去设置里面配置一下

配置好了再Gradle Sync之后就会出现Task列表

找到signingReport双击直接生成签名(包括debug,profile,release)的MD5,SHA1,SHA-256

用jks加密文件获取

jks作为加密文件可以直接拿到签名信息

keytool -list -v -keystore upload-keystore.jks

接下来输入密钥就可以获取到签名

在代码中获取

定义一个getSignInfo方法

public static ArrayList getSignInfo(Context context, String type) {

if (context == null || type == null) {

return null;

}

String packageName = context.getPackageName();

if (packageName == null) {

return null;

}

if (mSignMap.get(type) != null) {

return mSignMap.get(type);

}

ArrayList mList = new ArrayList();

try {

Signature[] signs = getSignatures(context, packageName);

assert signs != null;

for (Signature sig : signs) {

String tmp = "error!";

switch (type) {

case MD5:

tmp = getSignatureByteString(sig, MD5);

break;

case SHA1:

tmp = getSignatureByteString(sig, SHA1);

break;

case SHA256:

tmp = getSignatureByteString(sig, SHA256);

break;

}

mList.add(tmp);

}

} catch (Exception e) {

System.out.println(e);

}

mSignMap.put(type, mList);

return mList;

}

核心代码就是

private static Signature[] getSignatures(Context context, String packageName) {

PackageInfo packageInfo = null;

try {

packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);

return packageInfo.signatures;

} catch (Exception e) {

System.out.println(e);

}

return null;

}

直接获取包信息里面的签名

packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);

return packageInfo.signatures;

把签名的byte[]信息转换成 95:F4:D4:FG 这样的字符串形式

private static String getSignatureByteString(Signature sig, String type) {

byte[] hexBytes = sig.toByteArray();

String fingerprint = "error!";

try {

MessageDigest digest = MessageDigest.getInstance(type);

byte[] digestBytes = digest.digest(hexBytes);

StringBuilder sb = new StringBuilder();

for (byte digestByte : digestBytes) {

sb.append(((Integer.toHexString((digestByte & 0xFF) | 0x100)).substring(1, 3)).toUpperCase());

sb.append("😊;

}

fingerprint = sb.substring(0, sb.length() - 1);

} catch (Exception e) {

System.out.println(e);

}

return fingerprint;

}

运行时调用此方法可以获取到包括SHA1、MD5等签名信息,把对应的类型传进去就行了

通过工具获取

微信以前提供了apk,安装后输入包名就可以直接拿到签名

点击下载

相关推荐

航天三院8359研究所怎么样
office365E5无限续期

航天三院8359研究所怎么样

⏳ 07-03 👁️ 8515
激光打标机如何打标照片
best365投注

激光打标机如何打标照片

⏳ 09-22 👁️ 5945