博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFrame实现批量获取Android安装包安全证书MD5
阅读量:6353 次
发布时间:2019-06-22

本文共 3306 字,大约阅读时间需要 11 分钟。

今天遇到一个需求,获取所有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);			}		});		// 开始运行按钮		window.getBeginButton().addActionListener(new ActionListener() {			@Override			public void actionPerformed(ActionEvent arg0) {				inputPath = window.getJTextFiled();				if (inputPath != null && !"".equals(inputPath.trim())) {					notDirectoryExcute(new File(inputPath));				}			}		});		// 清空结果按钮		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
processList = new ArrayList
(); 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(); }}

转载于:https://www.cnblogs.com/lanzhi/p/6468706.html

你可能感兴趣的文章
Windows Server 2012 R2 Active Directory(活动目录)实验一
查看>>
android viewpager 无限左右滑动
查看>>
linux下SSH远程连接服务慢解决方案
查看>>
利用mic visual studio 2010 编译器执行wincap获取网络适配器的代码
查看>>
HTML
查看>>
CENTOS7下编译安装PHP-5.4以及配置phpMyAdmin
查看>>
磁盘显示无法访问拒绝访问,里面的资料怎样找到
查看>>
Java之品优购课程讲义_day07(5)
查看>>
Java的新项目学成在线笔记-day3(八)
查看>>
路由简单的实验
查看>>
好程序员web前端教程分享js reduce方法使用教程
查看>>
零基础学习大数据Hadoop需要什么准备?Hadoop如何发展起来的?
查看>>
前端程序员需要具备的几个软实力,你具备了吗
查看>>
RHEL系列网络配置2015083101
查看>>
c# 基本值类型及其默认值
查看>>
服务器端解决JS跨域调用问题
查看>>
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
查看>>
雨巷-戴望舒
查看>>
OpenCms创建网站过程图解——献给OpenCms的初学者们
查看>>
C++ 异常处理机制的实现
查看>>