/**
* 获取签值信息
* @author allen
* @version 2013-8-27 下午4:15:04
* @return
*/
public static void getSingInfo() {
try {
PackageManager manager=BankApp.getApp().getPackageManager()
PackageInfo packageInfo=manager.getPackageInfo(BankApp.getApp().getPackageName(), PackageManager.GET_SIGNATURES);
Signature[] signs = packageInfo.signatures;
Signature sign = signs[0];
return parseSignature(sign.toByteArray());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String parseSignature(byte[] signature) {
try {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(signature));
String pubKey = cert.getPublicKey().toString();
String signNumber = cert.getSerialNumber().toString();
System.out.println("signName:" + cert.getSigAlgName());
} catch (CertificateException e) {
e.printStackTrace();
return null;
}
}
获取到以上信息可以用来做签名比对。
非android环境下获取签名信息:
private static char[] toChars(byte[] mSignature) {
byte[] sig = mSignature;
final int N = sig.length;
final int N2 = N*2;
char[] text = new char[N2];
for(int j=0;j<N;j++){
byte v = sig[j];
int d = (v>>4)&0xf;
text[j*2] = (char)(d >= 10 ? ('a' + d - 10) : ('0' + d));
d = v&0xf;
text[j*2+1] = (char)(d >= 10 ? ('a' + d - 10) : ('0' + d));
}
return text;
}
private static java.security.cert.Certificate[] loadCertificates(JarFile jarFile, JarEntry je, byte[] readBuffer) {
try {
InputStream is = jarFile.getInputStream(je);
while(is.read(readBuffer,0,readBuffer.length)!=-1) {
}
is.close();
return (java.security.cert.Certificate[])(je!=null?je.getCertificates():null);
} catch (Exception e) {
e.printStackTrace();
System.err.println("Exception reading "+je.getName()+" in "+jarFile.getName()+": "+e);
}
return null;
}
public static String getApkSignInfo(String apkFilePath){
byte[] readBuffer = new byte[8192];
java.security.cert.Certificate[] certs = null;
try{
JarFile jarFile = new JarFile(apkFilePath);
Enumeration entries = jarFile.entries();
while(entries.hasMoreElements()){
JarEntry je = (JarEntry)entries.nextElement();
if(je.isDirectory()){
continue;
}
if(je.getName().startsWith("META-INF/")){
continue;
}
java.security.cert.Certificate[] localCerts = loadCertificates(jarFile,je,readBuffer);
System.out.println("File " + apkFilePath + " entry " + je.getName()+ ": certs=" + certs + " ("+ (certs != null ? certs.length : 0) + ")");
if (certs == null) {
certs = localCerts;
}else{
for(int i=0; i<certs.length; i++){
boolean found = false;
for (int j = 0; j < localCerts.length; j++) {
if (certs[i] != null && certs[i].equals(localCerts[j])) {
found = true;
break;
}
}
if (!found || certs.length != localCerts.length) {
jarFile.close();
return null;
}
}
}
}
jarFile.close();
return new String(toChars(certs[0].getEncoded()));
}catch(Exception e){
e.printStackTrace();
}
return null;
}
相关推荐
android获取签名MD5和SHA1下载地址
通过指定包名获取该应用的签名MD5指纹demo
该APP提供了获取手机上已安装的所有应用的签名信息,并支持直接复制。
获取android应用签名的方法网上很多,但基本都是很长一串,需要转换成32为的签名才是大家想要的
获取android安装的APP(apk)签名md5值,输入包名点击查询,即可显示包名对应的签名md5值 查询后,自动保存;这个本来是写来自己公司用的小工具,在之前app开发的时候,调试微信登录等等需要用到签名的地方,因为...
android系统签名,模拟器可用,用法见readme
主要介绍了Android实现获取签名及公钥的方法,可实现Android通过包名获取相关签名及公钥的功能,具有一定参考借鉴价值,需要的朋友可以参考下
鉴于某个垃圾博主只搬运两个小功能,竟然收30分,实在忍无可忍这种垃圾。app需要系统签名才可以获取信息,普通权限app只能部分信息。
安卓签名获取的一款工具,使用方法请见CSDN博客http://blog.csdn.net/weimeig/article/details/78818085
android获取应用32位签名.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
具体使用方法可以参考相关博客:http://blog.csdn.net/i5suoi/article/details/19036975
你要是忘了android 签名密码请使用这个试试,万一成功了.
Android应用签名获取工具,解压缩后内为APK文件,输入目标包名获取应用签名,方便快捷。希望能帮助到大家
关于微信开发者平台移动应用(android)获取签名问题
用于Androidstudio模拟器的系统签名,方便进行需要系统签名方面的调试,内含一个生成的platform.jks和系统签名源文件(.pk8和x...内含jks签名信息: Key store password:123456 Key alias:test Key password:123456
MD5 SHA1 SHA256 签名信息 点击签名信息可复制到剪切板, GitHub:https://github.com/sunan-n/GetAppInfo 如下图: ```java 主要就是这个方法,传参数进来获取相应的签名类型 信息 public static String ...
此文档介绍安卓获取签名方法,包括Androidstudio和eclipse的debug签名和release签名获取方式
android安卓获取apk签名工具
android,获取安装到手机的第三方应用签名的 apk 包