有些时候我们需要比对apk包的publickey,获取没有安装的APK包中的publickey可以使用如下的方式:
1 public String collectCertificates(String filePath) {
2 String result = "";
3 try {
4 JarFile jarFile = new JarFile(filePath);
5 Certificate[] certs = null;
6 Enumeration<JarEntry> entries = jarFile.entries();
7 while (entries.hasMoreElements()) {
8 JarEntry je = (JarEntry)entries.nextElement();
9 if (je.isDirectory()) continue;
10 if (je.getName().startsWith("META-INF/")) continue;
11 certs = loadCertificates(jarFile, je);
12
13 if (certs == null) {
14 jarFile.close();
15 return null;
16 }
17 break;
18 }
19 jarFile.close();
20
21 if (certs != null && certs.length > 0) {
22 if (certs[0].getPublicKey().getAlgorithm().equals("DSA")) {
23 result = ((DSAPublicKey)(certs[0].getPublicKey())).getY().toString(16);
24 } else {
25 result = getPublicKey(new Signature(certs[0].getEncoded()).toByteArray());
26 }
27 } else {
28 return null;
29 }
30 } catch (CertificateEncodingException e) {
31 return null;
32 } catch (IOException e) {
33 return null;
34 } catch (RuntimeException e) {
35 return null;
36 }
37
38 return result;
39 }
40
41 private Certificate[] loadCertificates(JarFile jarFile, JarEntry je) {
42 try {
43 byte[] readBuffer = new byte[8192];
44
45 InputStream is = new BufferedInputStream(jarFile.getInputStream(je));
46 while (is.read(readBuffer, 0, readBuffer.length) != -1) {
47
48 }
49 is.close();
50 return je != null ? je.getCertificates() : null;
51 } catch (IOException e) {
52 } catch (RuntimeException e) {
53 }
54 return
分享到:
相关推荐
在Android开发中,获取通知栏的内容是一项常见的需求,特别是在做系统监控、日志记录或者定制化功能时。本文将深入探讨如何通过源码实现这一功能,主要涉及Android的通知系统架构和相关API的使用。 首先,我们需要...
在Android开发中,获取地理位置是常见的需求之一,而百度API提供了强大的定位服务,使得开发者能够方便地获取到设备的经纬度信息。本文将详细介绍如何在Android应用中利用百度地图API来实现这一功能。 首先,我们...
this.publickey=generatePublicKeyByString(publickey); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private RSAPublicKey ...
本教程将详细讲解如何在Android应用中实现本地获取七牛云的Token,以及如何进行文件的上传和删除操作,无需依赖业务服务器的协助。 首先,我们需要在七牛云官网上注册一个账号,并创建一个存储空间(Bucket),这是...
在Android应用开发中,从数据库获取数据并动态地展示在APP上是常见的需求。这个过程涉及到Android的SQLite数据库管理系统、Content Provider、CursorAdapter以及UI组件的交互。下面将详细讲解这些知识点。 首先,...
在Android平台上,获取当前天气信息是一项常见的功能,它能够为用户提供实时的气象数据,帮助他们做好日常生活或出行的准备。本项目实现了一个简单的天气查询功能,利用了和风天气(QWeather)提供的API接口。接下来...
本文将深入探讨如何在Android应用中使用高德API获取经纬度。 首先,我们需要在高德地图开放平台(https://lbs.amap.com/)上注册账号并创建应用,获取到应用的`key`。这个`key`是连接我们应用和高德服务的桥梁,...
在Android开发中,GET和POST是两种常见的HTTP请求方法,用于从服务器获取或发送数据。本文将详细探讨这两种方法以及如何处理JSON和XML格式的数据。 首先,GET和POST的主要区别在于它们的使用场景和数据传输方式。...
在Android开发中,获取天气预报是一项常见的功能,它允许用户查询特定城市的实时及未来几天的天气情况。要实现这个功能,开发者需要理解网络请求、JSON解析、数据展示等多个技术环节。下面将详细介绍如何在Android中...
publickey = publickey.substring(publickey.indexOf("modulus: ") + 9, publickey.indexOf("\n", publickey.indexOf("modulus:"))); Log.d("TRACK", publickey); return publickey; } catch ...
在Android平台上,获取音乐文件的信息是一项常见的任务,尤其对于音乐播放器或者音乐管理类的应用来说。这个过程通常涉及到解析音频文件的元数据,包括艺术家、曲目标题、专辑、时长等。本教程将深入讲解如何使用...
本教程将聚焦于如何在Android客户端利用Volley框架来获取并解析JSON数据。 首先,Volley是一个由Google开发的网络请求库,它提供了高效的网络请求处理机制,包括异步请求、请求队列管理和错误处理等。它的设计目标...
本文将详细讲解如何在Android的WebView中加载网页,并获取URL参数值的方法。 首先,我们要明白WebView的基本使用。创建一个WebView可以通过以下代码: ```java WebView webView = new WebView(this); webView....
首先,`Android-Android集成Mob使用自定义UI获取短信验证码`表明我们需要在Android应用中集成Mob提供的SDK服务,以实现短信验证码的发送与接收。Mob是一家提供移动开发服务的公司,其中包括短信验证服务,方便开发者...
本篇将详细讲解如何在Android中使用POST方式来获取数据,并结合源代码和JSON解析进行实例说明。 首先,POST请求常用于向服务器发送大量数据或者需要改变服务器状态的情况。在Android中,我们可以使用`...
在Android开发中,调用百度地图API来获取设备的经纬度是一项常见的任务,这有助于实现各种定位相关的功能,如导航、位置服务等。本篇文章将详细介绍如何在Android应用中集成百度地图API,进行定位并获取经纬度信息。...
在这个"Android IOC获取注解(XUtils方式)实现Demo"中,我们将探讨如何利用XUtils实现注解注入。 首先,我们需要理解什么是注解(Annotation)。注解是Java提供的一种元数据机制,它允许我们在代码中添加额外的信息...
本教程将详细讲解如何在Android中获取通过HTTP协议传输的JSON数据,以及如何将App数据上传到服务器。 一、HTTP请求库的选择与使用 在Android中,我们可以使用多种HTTP请求库来发送网络请求,如Volley、OkHttp、...
例如,如果你的JSON数据是一个对象的数组,你可以先将其转化为`JSONArray`,然后遍历数组,获取每个对象的key和value。 ```java JSONArray jsonArray = new JSONArray(jsonString); for (int i = 0; i (); i++) { ...
在Android开发中,从远程服务器获取JSON数据是一个常见的任务,特别是在构建网络驱动的应用程序时。本文将深入探讨如何在Android中通过HTTP协议获取JSON源码,并解析这些数据以供应用程序使用。以下是一份详细的步骤...