读取Android APK文件签名的方法
在微信开放平台等申请API key 和secret时经常要用到apk文件签名,那么如何读取呢?
下面贴一下相关读取源码:
一共两个文件MainActivity和MD5,
- package com.lcg.gensinature;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.pm.PackageInfo;
- import android.content.pm.PackageManager;
- import android.content.pm.PackageManager.NameNotFoundException;
- import android.content.pm.Signature;
- import android.os.Bundle;
- import android.text.ClipboardManager;
- import android.text.Editable;
- import android.text.TextUtils;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity
- {
- private Button mCopyBtn;
- private Button mGenBtn;
- private EditText mPackageEt;
- private TextView md5SignTv;
- public static byte[] getSign(Context paramContext, String paramString)
- {
- PackageInfo localPackageInfo;
- int i;
- byte[] arrayOfByte;
- try
- {
- localPackageInfo = paramContext.getPackageManager().getPackageInfo(paramString, 64);
- i = 0;
- if (i >= localPackageInfo.signatures.length)
- {
- return null;
- }
- System.out.println(i);
- arrayOfByte = localPackageInfo.signatures[i].toByteArray();
- System.out.println(arrayOfByte);
- return arrayOfByte;
- }
- catch (PackageManager.NameNotFoundException localNameNotFoundException)
- {
- return null;
- }
- }
- protected void onCreate(Bundle paramBundle)
- {
- super.onCreate(paramBundle);
- setContentView(R.layout.activity_main);
- this.mPackageEt = ((EditText)findViewById(R.id.pkgNameEt));
- this.mGenBtn = ((Button)findViewById(R.id.getBtn));
- this.mGenBtn.setOnClickListener(new View.OnClickListener()
- {
- public void onClick(View paramView)
- {
- String str1 = MainActivity.this.mPackageEt.getText().toString();
- if (TextUtils.isEmpty(str1));
- byte[] arrayOfByte;
- arrayOfByte = MainActivity.getSign(MainActivity.this.getApplicationContext(), str1);
- String str2 = "";
- try
- {
- str2 = MD5.hexdigest(arrayOfByte);
- Log.d("genSinature", "gen md5=" + str2);
- System.out.println(str2);
- MainActivity.this.md5SignTv.setText(str2);
- ClipboardManager cmb = (ClipboardManager)MainActivity.this.getSystemService(MainActivity.this.CLIPBOARD_SERVICE);
- cmb.setText(str2);
- Toast.makeText(MainActivity.this, "已经复制到剪贴板", 1).show();
- return;
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- });
- this.md5SignTv = ((TextView)findViewById(R.id.resultTv));
- showDialog();
- }
- private void showDialog()
- {
- AlertDialog.Builder localBuilder = new AlertDialog.Builder(this);
- localBuilder.setCancelable(false);
- localBuilder.setTitle("警告ʾ").setMessage("将读取APP信息");
- localBuilder.setPositiveButton("拒绝", null);
- localBuilder.setNegativeButton("同意", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface paramDialogInterface, int paramInt)
- {
- MainActivity.this.finish();
- }
- });
- localBuilder.show();
- }
- }
- package com.lcg.gensinature;
- import java.security.MessageDigest;
- public class MD5
- {
- private static final char[] hexDigits = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 };
- public static String hexdigest(String paramString)
- {
- try
- {
- String str = hexdigest(paramString.getBytes());
- return str;
- }
- catch (Exception localException)
- {
- }
- return null;
- }
- public static String hexdigest(byte[] paramArrayOfByte)
- {
- try
- {
- MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
- System.out.println(paramArrayOfByte);
- localMessageDigest.update(paramArrayOfByte);
- byte[] arrayOfByte = localMessageDigest.digest();
- System.out.println(arrayOfByte);
- char[] arrayOfChar = new char[32];
- int i = 0;
- int j = 0;
- for(i=0;i<16;i++){
- int k = arrayOfByte[i];
- int l = j + 1;
- arrayOfChar[j] = hexDigits[(0xF & k >>> 4)];
- j = l + 1;
- arrayOfChar[l] = hexDigits[(k & 0xF)];
- }
- if (i >= 16)
- return new String(arrayOfChar);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- return null;
- }
- }
更多精彩内容请访问 http://www.leegtang.com
读取Android APK文件签名的方法的更多相关文章
- android apk的签名和权限问题
一. android apk的签名问题(http://blog.csdn.net/lyq8479/article/details/6401093) 1.为什么要给Android应用程序签名? ...
- apk文件签名绕过
声明: 1.本文转载自:http://www.2cto.com/Article/201311/256406.html,为了留作日后参考上传博客 2.如有转载请复试上面连接,尊重原创 apk文件签名绕过 ...
- 如何给apk文件签名
1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本 ...
- Visual Studio 2017为Android APK包签名
Visual Studio 2017为Android APK包签名 为Android APK包签名,可以保证后期的App顺利升级.在Visual Studio 2015中,IDE会自动生成两个AP ...
- Android之APK文件签名——keytool和jarsigner
一.生成密钥库将位置定位在jdk的bin文件中,输入以下命名行:keytool -genkey -alias ChangeBackgroundWidget.keystore -keyalg RSA - ...
- [Android]使用platform密钥来给apk文件签名的命令
1.使用platform密钥对apk进行签名 1.1.进入<Android_Source_Path>/build/target/product/security,找到[platform.p ...
- Android APK如何签名
Android项目以它的包名作为唯一标识,如果在同一设备上安装两个相同的应用,后面安装的应用就会覆盖前面安装的应用.为了避免这种情况的发生,我们需要对作为产品发布的应用进行签名. 签名其实有两个作用: ...
- android APK 文件的生成过程
步骤: 1. 用 aapt工具生成R文件aapt package -m -J gen目录 -M AndroidManifest.xml -S res目录 -I 编译版本sdk的android ...
- (转载)重新对APK文件签名
1.将证书(debug.keystore)复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign) 2.在cmd中切换到需要重新签名的apk文件的目录下 3.使用WinRAR打开要重新 ...
随机推荐
- java+数据库+D3.js 实时查询人物关系图
先看下 效果 某个用户,邀请了自己的朋友 ,自己的朋友邀请了其他朋友,1 展示邀请关系,2 点击头像显示邀请人和被邀请人的关系.(网上这种资料很少, 另外很多都是从JSON文件取 数据, 这里是从数据 ...
- WinDbug抓取进程dump
安装WinDbug(包含在 Windows Kits-debugger 中)后,运行如下命令将会在 explorer.exe进程发生崩溃后抓取相应的内存数据到D盘根目录下的一个文件夹中 adplus. ...
- Andriod:如何卸载模拟器上已经安装的应用程序?
根据学习对HelloWorld进行手术的时候,遇到了一个问题: 就是在修改了布局后,重新链接模拟器时报错: Installing helloworld.apk... Re-installation f ...
- Open quote is expected for attribute "{1}" associated with an element type "name".
xml属性必须用引号“”,不能缺少.
- I18N 国际编码
<%@ page language="java" import="java.util.*, cn.hncu.domain.*" pageEncoding= ...
- HDU2076
夹角有多大(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- (原创)speex与wav格式音频文件的互相转换(二)
之前写过了如何将speex与wav格式的音频互相转换,如果没有看过的请看一下连接 http://www.cnblogs.com/dongweiq/p/4515186.html 虽然自己实现了相关的压缩 ...
- 解决无法获取 GridView 隐藏列值问题
今天遇到了一个要获取GridView隐藏列值的问题,试了好几种方法,要么获取不到,要么获取到了类列的值也隐藏了,但在样式中这一列会多出一块,,但最后找到了一个功能实现而且实现了列完美隐藏的方法和大家分 ...
- 3dmax使用K帧工具创建一个行走动作
第一步,创建一个biped骨骼. 这个就不截图了,因为基本都会. 记住一点,先改变了关键点再去修改,不然修改的是前一个关键帧的动作. 第二步,开启自动关键帧,然后给初始位置双脚添加踩踏关键点.设置关键 ...
- [python]pep8编码规范
一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车.3 类 ...