在微信开放平台等申请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文件签名的方法的更多相关文章

  1. android apk的签名和权限问题

    一. android apk的签名问题(http://blog.csdn.net/lyq8479/article/details/6401093) 1.为什么要给Android应用程序签名?      ...

  2. apk文件签名绕过

    声明: 1.本文转载自:http://www.2cto.com/Article/201311/256406.html,为了留作日后参考上传博客 2.如有转载请复试上面连接,尊重原创 apk文件签名绕过 ...

  3. 如何给apk文件签名

    1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本 ...

  4. Visual Studio 2017为Android APK包签名

    Visual Studio 2017为Android APK包签名   为Android APK包签名,可以保证后期的App顺利升级.在Visual Studio 2015中,IDE会自动生成两个AP ...

  5. Android之APK文件签名——keytool和jarsigner

    一.生成密钥库将位置定位在jdk的bin文件中,输入以下命名行:keytool -genkey -alias ChangeBackgroundWidget.keystore -keyalg RSA - ...

  6. [Android]使用platform密钥来给apk文件签名的命令

    1.使用platform密钥对apk进行签名 1.1.进入<Android_Source_Path>/build/target/product/security,找到[platform.p ...

  7. Android APK如何签名

    Android项目以它的包名作为唯一标识,如果在同一设备上安装两个相同的应用,后面安装的应用就会覆盖前面安装的应用.为了避免这种情况的发生,我们需要对作为产品发布的应用进行签名. 签名其实有两个作用: ...

  8. android APK 文件的生成过程

    步骤: 1. 用 aapt工具生成R文件aapt  package  -m -J  gen目录 -M AndroidManifest.xml  -S res目录  -I 编译版本sdk的android ...

  9. (转载)重新对APK文件签名

    1.将证书(debug.keystore)复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign) 2.在cmd中切换到需要重新签名的apk文件的目录下 3.使用WinRAR打开要重新 ...

随机推荐

  1. WordPress公布新文章Email通知注冊用户

    非常多WordPress博客都开放了用户注冊的功能,用户能够參与到博客的内容建设其中来.也就是一个博客由多个用户来写.如今有这种需求,怎样实如今某一个用户发表文章后.其它用户都能收到Email通知?以 ...

  2. [React] React Fundamentals: Component Lifecycle - Mounting Basics

    React components have a lifecycle, and you are able to access specific phases of that lifecycle. Thi ...

  3. textarea文本域宽度和高度(width、height)自己主动适应变化处理

    文章来源:http://www.cnblogs.com/jice/archive/2011/08/07/2130069.html <HTML> <HEAD> <TITLE ...

  4. android107 指针入门

    #include <stdio.h> #include <stdlib.h> //指针就是内存地址 //32为操作系统最大是4G内存,32为系统则是2的32次方, //所以只能 ...

  5. linux 内核 编绎配制选项详解

    http://blog.sina.com.cn/s/blog_8308bc810102ux0j.html

  6. 标准I/O库之标准输入、标准输出和标准出错

    对一个进程预定义了三个流,并且这三个流可以自动地被进程使用,它们是:标准输入.标准输出和标注出错.这些流引用的文件与文件描述符STDIN_FILENO.STDOUT_FILENO和STDERR_FIL ...

  7. 玩转Android之数据库框架ActiveAndroid的使用

    ActiveAndroid是一个开源的数据库框架,使我们在Android中使用数据库变得更为简单,今天我们就来看看这个数据库框架的使用. 1.引入ActiveAndroid 首先创建我们自己的项目,在 ...

  8. base查找方法的实现JAVA

    import java.util.List; import java.util.ArrayList; import java.util.Scanner; /*在一个有序数组中查找一个数的过程,模拟二分 ...

  9. hibernate简单应用

    Hibernate 第二章 核心API 和CURD实现 核心API介绍 单表操作方法 查询hql语句 1.认识hibernate 核心思想ORM:实现数据库中的文件一一映射为java中的实体类. 使用 ...

  10. Linux下如何在打开终端的时候自动配置相关环境

    参考博客“Linux启动文件.设置环境变量的位置”(http://www.2cto.com/os/201305/208251.html) 在不可取的root权限的时候可以选择编辑~/.bashrc文件 ...