查看Android打包时签名文件keystore的MD5值
有些SDK提供方需要我们提供打包APK时使用的包名和签名文件(xxxxxx.jks这个文件)MD5值,然后SDK服务端应该会进行比对保证商户调用的合法性。不然光靠包名是可以伪造的,怎么获取签名文件的MD5值?
方法一:
原先通过命令keytool -list -v -keystore test.jks 可以查看md5值,但是发现现在查看不了,只有SHA1和SHA256的
方法二:改成从androidstudio查看
在app的build.gradle中配置你们签名文件,怎么生成签名文件?
build-->Generate signed bundle\APK-->next -->Create new
android{
signingConfigs {release {keyAlias 'test'storePassword '666666'keyPassword '666666'storeFile file('E:\\test.jks')}debug {keyAlias 'test'storePassword '666666'keyPassword '666666'storeFile file('E:\\test.jks')} }
}
右侧gradle Tasks里面双击signingReport就可以查看签名文件的MD5值了
获取后去掉 :
方法三:从PackageInfo类中获取
package com.chinapay.umsfacesdkdemo.utils;import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.util.Log;import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.HashMap;/*** 获取签名工具类*/
public class AppSigning {public final static String MD5 = "MD5";public final static String SHA1 = "SHA1";public final static String SHA256 = "SHA256";private static HashMap<String, ArrayList<String>> mSignMap = new HashMap<>();/*** 返回一个签名的对应类型的字符串** @param context* @param type* @return 因为一个安装包可以被多个签名文件签名,所以返回一个签名信息的list*/public static ArrayList<String> 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<String> mList = new ArrayList<String>();try {Signature[] signs = getSignatures(context, packageName);for (Signature sig : signs) {String tmp = "error!";if (MD5.equals(type)) {tmp = getSignatureByteString(sig, MD5);} else if (SHA1.equals(type)) {tmp = getSignatureByteString(sig, SHA1);} else if (SHA256.equals(type)) {tmp = getSignatureByteString(sig, SHA256);}mList.add(tmp);}} catch (Exception e) {Log.e("e", e.getMessage());}mSignMap.put(type, mList);return mList;}/*** 获取签名sha1值** @param context* @return*/public static String getSha1(Context context) {String res = "";ArrayList<String> mlist = getSignInfo(context, SHA1);if (mlist != null && mlist.size() != 0) {res = mlist.get(0);}return res;}/*** 获取签名MD5值** @param context* @return*/public static String getMD5(Context context) {String res = "";ArrayList<String> mlist = getSignInfo(context, MD5);if (mlist != null && mlist.size() != 0) {res = mlist.get(0);}return res;}/*** 获取签名SHA256值** @param context* @return*/public static String getSHA256(Context context) {String res = "";ArrayList<String> mlist = getSignInfo(context, SHA256);if (mlist != null && mlist.size() != 0) {res = mlist.get(0);}return res;}/*** 返回对应包的签名信息** @param context* @param packageName* @return*/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) {Log.e("e", e.toString());}return null;}/*** 获取相应的类型的字符串(把签名的byte[]信息转换成16进制)** @param sig* @param type* @return*/private static String getSignatureString(Signature sig, String type) {byte[] hexBytes = sig.toByteArray();String fingerprint = "error!";try {MessageDigest digest = MessageDigest.getInstance(type);if (digest != null) {byte[] digestBytes = digest.digest(hexBytes);StringBuilder sb = new StringBuilder();for (byte digestByte : digestBytes) {sb.append((Integer.toHexString((digestByte & 0xFF) | 0x100)).substring(1, 3));}fingerprint = sb.toString();}} catch (Exception e) {Log.e("e", e.toString());}return fingerprint;}/*** 获取相应的类型的字符串(把签名的byte[]信息转换成 95:F4:D4:FG 这样的字符串形式)** @param sig* @param type* @return*/private static String getSignatureByteString(Signature sig, String type) {byte[] hexBytes = sig.toByteArray();String fingerprint = "error!";try {MessageDigest digest = MessageDigest.getInstance(type);if (digest != null) {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).toString();}} catch (Exception e) {Log.e("e", e.toString());}return fingerprint;}
}
调用上面的 String md5=AppSigning.getMD5(MainActivity.this)就可以了
查看Android打包时签名文件keystore的MD5值相关推荐
- 查看 android打包证书签名
查看 android打包证书签名 用java keytool 查看证书签名 keytool -list -v -keystore 证书路径 输入证书密码之后会看到 MD5\SHA1\SHA256 签名 ...
- android生成md5,使用Android studio生成签名文件以及获取MD5
内容要点:android 一.Android studio生成签名文件安全 二.经过Android studio获取MD5app 1.Android studio生成签名文件ide 在菜单栏中,点击 ...
- android ndk 编译虚幻4,[UE4]Android 打包步骤与keystore生成设置
官方文档步骤: https://docs.unrealengine.com/latest/INT/Platforms/Android/GettingStarted/index.html 注:这里演示使 ...
- android签名忘记密码,Android打包时忘记了签名文件的密码
今天发生一件十分坑爹的事,之前维护的一个项目急需发布新版本,但是我竟然忘记了签名文件的密码,别名,别名密码全都忘了,尝试了好几次都不行,于是各种查资料,好在最后找到了解决方案,现记录下来以备不时之需. ...
- android打包时出现***is not translated in zh-rCN (Chinese: China)
现象描述: Android项目,使用eclipse打apk包时,报错: strings.xml等资源文件***is not translated in "zh-rCN" (Chin ...
- UE4安卓打包配置(大陆内网络整顿后,Android打包时AndroidWorks无法使用的解决方法)
由于国内进行了网络整顿,UE4官网上用CodeWorksforAndroid下载安卓打包工具配置的方法已经不能使用了,开了VPN也链接不上.这使得用UE4打包配置安卓游戏变得非常麻烦,博主捣鼓了好几天 ...
- Android 打包报 Invalid keystore format
Invalid keystore format 出现这个错误,我这里是jdk配置出现了问题,一个是自己下载安装的jdk ,一个是android studio安装带的jre,改成 android s ...
- [UE4]android打包时,设备上弹出错误:Failed to open descriptor file uproject
UE4以shipping模式在android设备上Launcher时,游戏启动时会提示错误: Failed to open descriptor file uproject 网上查了下,UE官方论坛上 ...
- 基于vue框架下使用Element-UI获取文件MD5值并上传
基于vue框架下使用Element-UI获取文件MD5值并上传 使用插件: spark-md5 .vue页面 <el-uploadclass="avatar-uploader idca ...
- android studio生产签名文件,Android Studio生成keystore签名文件步骤讲解
Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...
最新文章
- Linux服务器安装python3.6.1 运行爬虫
- Sci-Hub重生了,这回用上了分布式网络
- 统计5分钟内Nginx访问量及平均相应时间
- 汇编:OF溢出标志位
- VM与VPC共存(续)
- shell 中引用参数总结
- GraphQL支持层级结构的query
- linux db2 ssl,IBM DB2 Content Manager V83与手工配置SSL
- java安全——加密
- 应对不良网络文化的技术之一——网络信息抽取技术
- excel批量更改超链接_批量新建Excel指定名称工作表并设置超链接!你,学会了吗?...
- linux-gzip压缩
- Asp.Net MVC 的重要入门概念
- 睡眠监测中的一些术语和指标(AASM)
- Smobiler实现手机弹窗
- 【ESP8266+STM32】获取B站粉丝数,并在STM32屏上显示出来(物联网小项目)
- 航空公司客户价值特征构建与分析k-means
- 计算机中职生毕业鉴定评语,中职生学生毕业鉴定评语
- jdk1.8换成11,启动项目报错java.net.MalformedURLException: unknown protocol: jrt
- 详解1M宽带下载速度?1M等于多少kb?
热门文章
- 【2021】重装ubuntu16.04系统
- 百度文库免费下载(附:分享一些有趣的网站,最后一个可以免飞下载百度文库)
- 【路径规划】基于蚁群算法求解带时间窗车辆路径问题(VRPTW)matlab代码
- 一款,整合百度翻译api跟有道翻译api的翻译君
- 高德城市编码json_sql_excel 三级联动json合集
- html星星连线特效代码,js实现飞入星星特效代码
- 安卓系统加速_安卓系统用户玩LOL手游用网易UU加速器加速被拦截解决方案
- MATLAB计算图片的标准差与方差 MEAN STD
- python删除word表格中的某一行_python-docx添加和删除表格行、列
- Cadence PSpice 仿真6:反向放大器傅里叶仿真(FFT,谐波分析)实战图文教程