JFrame实现批量获取Android安装包安全证书MD5
今天遇到一个需求。获取全部apk的签名的MD5。以下是我使用Java SE实现的一个工具。贴出核心源码。希望给有须要的朋友有所帮助。
界面例如以下:
仅仅须要制定.apk文件所在的文件夹就可以,核心代码例如以下:
public class ReadCmdLine {
private static MD5Window window;
private static String inputPath;
public static void main(String args[]) {
window = new MD5Window();
window.setVisible(true);
initWindow();
}
private static void initWindow() {
// 文件文件夹文本框
window.getFilePathButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
JFileChooser jfc = new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
jfc.showDialog(new JLabel(), "选择");
File file = jfc.getSelectedFile();
notDirectoryExcute(file);
}
});
// 開始运行button
window.getBeginButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
inputPath = window.getJTextFiled();
if (inputPath != null && !"".equals(inputPath.trim())) {
notDirectoryExcute(new File(inputPath));
}
}
});
// 清空结果button
window.getClearButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
window.setTextArea("");
}
});
}
/**
* 推断是否是文件夹,假设不是则运行
*
* @param file
*/
public static void notDirectoryExcute(File file) {
if (file.isDirectory()) {
inputPath = file.getAbsolutePath();
window.setJTextFiled(inputPath);
File[] fiels = file.listFiles();
for (int i = 0; i < fiels.length; i++) {
String absPath = fiels[i].getAbsolutePath();
if (absPath.contains(".apk")) {
excute(absPath);
}
}
} else {
JOptionPane.showMessageDialog(window, "请选择文件夹");
}
}
/**
* 核心逻辑
*
* @param absPath
*/
public static void excute(String absPath) {
// 1、从.apk中读取CERT.RSA文件
String appName = absPath.substring(absPath.lastIndexOf("_") + 1,
absPath.lastIndexOf("."));
try {
if (absPath != null) {
readZipFile(absPath);
}
} catch (Exception e) {
e.printStackTrace();
}
// 2、运行 keytool命令获取MD5
Process process = null;
List<String> processList = new ArrayList<String>();
try {
process = Runtime.getRuntime().exec(
"keytool -printcert -file D:/test/CERT.RSA");
BufferedReader input = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = "";
while ((line = input.readLine()) != null) {
processList.add(line);
}
input.close();
} catch (IOException e) {
e.printStackTrace();
}
// 过滤内容
for (String line : processList) {
if (line.contains("MD5")) {
window.setTextArea(window.getTextArea()
+ String.format("%-30s", appName) + line.trim() + "\n");
}
}
}
/**
* 读取压缩文件内容
*
* @param file 压缩文件的路径
* @throws Exception
*/
public static void readZipFile(String file) throws Exception {
ZipFile zf = new ZipFile(file);
InputStream in = new BufferedInputStream(new FileInputStream(file));
ZipInputStream zin = new ZipInputStream(in);
File outFile = new File("D:\\test\\CERT.RSA");
OutputStream out = new FileOutputStream(outFile);
InputStream rsaStream = zf.getInputStream(zf
.getEntry("META-INF/CERT.RSA"));
byte[] buf1 = new byte[1024];
int len;
while ((len = rsaStream.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
rsaStream.close();
out.close();
in.close();
zin.closeEntry();
}
}
JFrame实现批量获取Android安装包安全证书MD5的更多相关文章
- 技术|Android安装包优化
版权声明 1.本文版权归原作者所有,转载需注明作者信息及原文出处. 2.本文作者:赵裕(vimerzhao),永久链接:https://github.com/vimerzhao/vimerzhao.g ...
- 技术|Android安装包极限优化
版权声明 1.本文版权归原作者所有,转载需注明作者信息及原文出处. 2.本文作者:赵裕(vimerzhao),永久链接:https://github.com/vimerzhao/vimerzhao.g ...
- Android安装包相关知识汇总 (编译过程图给力)
转自: https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208008519&idx=1&sn=278b7793699 ...
- android 安装包签名问题探究
1.首先先科普一下,android为什么需要给安装包签名: 所有的Android应用程序在发布之前都要求开发人员用一个证书进行数字签名,anroid系统不会安装没有进行签名的由于程序. 平时我们 ...
- Android安装包apk文件在某些版本操作系统上安装解析包出错问题的解决办法
当我们将Android升级功能的中的下载新版本apk文件存放在data/data/xxx.apk位置时,在有的些版本的手机中安装可能会出现安装包解析出错的问题,对于该问题的解决方案是提升该文件的权限. ...
- Mac下获取AppStore安装包文件路径
通过远在大洋彼岸的苹果服务器下载东西,确实有够慢啊!AppStore更甚:甚至都经常提示连不上服务器,而有些软件呢,还必须从AppStore下载安装,所以没办法,谁让上了苹果的贼船呢!公司的网速更是不 ...
- Mac下获取AppStore安装包文件路径-取出安装包
问题描述:我们通过AppStore下载软件的时候想要把安装包保存下来,但是AppStore安装好之后会自动删除安装包,而且安装路径也很难找到. 解决方案: 一.打开活动监视器 二.找storedown ...
- unity 导出 android安装包配置方案
原地址:http://blog.csdn.net/u012085988/article/details/17393111 1.jdk本人安装的是win32版的(虽然系统是64位的.但听说装64位的导出 ...
- [原]获取openstack-pike安装包
linux version: CentOS 7.5.1804 #进入仓库配置目录 cd /etc/yum.repo.d/ #批量重命名所有文件 for files in `ls *`; do mv $ ...
随机推荐
- 关于dbms_output包的使用
General Source {ORACLE_HOME}/rdbms/admin/dbmsotpt.sql First Available 7.3.4 Data Types TYPE chararr ...
- md5加密、Des加密对称可逆加密、RSA非对称可逆加密、https单边验证、银行U盾双边认证
1.md5不可逆的加密方式,加密成一个32位的字符串.算法是公开的,任何语言的加密结果都是一样的.总有可能是重复的. 用途: (1)防止明文存储:可以用作密码加密 ...
- git 删除分支如何恢复
强制删除了一个分支而后又想重新使用这个分支,该怎么找回该分支上的代码呢? 一:问题描述: 今天师父说上线几个功能,让我把开发的分支推送到远程.当打开git就傻眼了,之前开发好的分支被我删除了,就连推送 ...
- 联想 P70-t 免解锁BL 免rec Magisk Xposed 救砖 ROOT
>>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...
- 【C++】朝花夕拾——树(开篇)
树 ===================我是分割线====================== 1. 定义: 一些结点的集合,集合可以为空.定义树的自然方式是递归的方法. 2. 相关概念: 根(ro ...
- LR性能分析随笔(一)
一.关键词 吞吐量:对于吞吐量,单位时间内吞吐量越大,说明服务器的处理能力越好:而请求数仅表示客户端向服务器发出的请求数,与吞吐量一般成正比关系. HTTP:HTTP404表示文件或目录没有找到.有些 ...
- Java基础(十)--static关键字
static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存 ...
- Java基础(九)--反射
什么是反射? 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性 这种动态获取的信息以及动态调用对象的方法的功能称为反射机制. 反射的前 ...
- Angular ZoneJS 原理
Zone.js到底是如何工作的? 原文链接: blog.kwintenp.com 如果你阅读过关于Angular 2变化检测的资料,那么你很可能听说过zone.Zone是一个从Dart中引入的特性并被 ...
- 洛谷——P3919 【模板】可持久化数组(可持久化线段树/平衡树)
P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...