android中有时候需要获取应用的签名信息,签名信息一般有:公钥,算法名,MD5值,序列号。要想获取这些信息首先该APK应用要有系统权限。
1 在配置文件里添加系统权限:android:sharedUserId="androiduidsystem"
2 获取签名信息的字符信息:
String signature_key = "";
try{
PackageInfo packageInfo = contextgetPackageManager()getPackageInfo(pkgName,
PackageManagerGET_SIGNATURES);
Signature[] signatures =
packageInfosignatures;
SignatureKeyparseSignature(signatures[0]toByteArray());
} catch (NameNotFoundException e) {
eprintStackTrace();
} catch (NullPointerException e) {
eprintStackTrace();
}
(1)其中packageInfo 得到的是指定包名的签名信息的字符串。另提及多说一句:在程序中我们一般使用
List list =
mPackageManagergetInstalledPackages(0);来得到所有的安装包的信息,这其中包括应用名,包名,大小
(2)
其中[]signatures里是存放的签名的字符串数组。我们一般取用第一个signatures[0]来做为该应用的签名信息。这里有一个疑惑就是为什么得到的是一个字符串的数组列表,而不是一个字符串,也有的开发者采用:
StringBuilder builder = new StringBuilder();
for(Signature sign: signatures
){
builderappend(signtoCharsString());
builderappend("/n");
}来得到所有的签名信息。在这里我验证过,signatures
的长度为1,所以指定apk的签名信息就为signatures[0]。
至于第二种方法有待发现。
3 获取签名的MD5值
public static final String getMD5String(byte[] paramArrayOfByte)
{
char[] asciiTable = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97, 98, 99, 100, 101, 102 }; // ascii表对应的数字和字符的编码
try
{
MessageDigest md5MessageDigest =
MessageDigestgetInstance("MD5");
md5MessageDigestupdate(paramArrayOfByte);//
byte[]
tempByte = md5MessageDigestdigest();
int i =
tempBytelength;
char[] tempChar = new char[i
2];
int j = 0;
int k =
0;
while (true) { //
将二进制数组转换成字符串
if (j >= i)
{
return new
String(tempChar);
}
int m
= tempByte[j];
int n = k +
1;
tempChar[k] = asciiTable[(0xF & m >>>
4)];
k = n +
1;
tempChar[n] = asciiTable[(m &
0xF)];
j++;
}
}
catch (Exception e)
{
eprintStackTrace();
}
return
null;
}
(1) 其中参数就是上一步得到的签名的byte数组。
4 获取公钥,签名算法,签名序列号
public static void parseSignature(byte[] signature)
{
try
{
CertificateFactory
certFactory =
CertificateFactorygetInstance("X509");
X509Certificate cert = (X509Certificate) certFactorygenerateCertificate(new
ByteArrayInputStream(signature));
String pubKey =
certgetPublicKey()toString(); //公钥
String signNumber =
certgetSerialNumber()toString();
Systemoutprintln("signName:" +
certgetSigAlgName());//算法名
Systemoutprintln("pubKey:" +
pubKey);
Systemoutprintln("signNumber:" +
signNumber);//证书序列编号
Systemoutprintln("subjectDN:"+certgetSubjectDN()toString());
} catch (CertificateException e)
{
eprintStackTrace();
}
}
5 电脑查看APK签名信息
查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERTRSA文件
1keytool
-printcert -file META-INF/CERTRSA
命令是:keytool -printcert -file
<签名文件RSA的路径>
2jarsigner -verify -verbose -certs Superuserapk
此条未验证成功
工具/原料
Android手机系统
Android如何查看应用签名信息
1
1、查看自己的应用签名可以通过两种方式查看(1) debug的apk通过Eclipse查看,如下图:
2
(2) 某个keystore签名的应用,通过
Java
1
keytool -list -keystore E:\Trinea\keystore\appsearchkeystore
查看,会要求输入签名密码,默认为android,如下图:
3
2、查看三方应用或是系统应用签名用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERTRSA文件,通过
Java
1
keytool -printcert -file META-INF/CERTRSA
命令打印证书信息,如微信证书信息如下图:
4
可以查看签名的MD5、SHA1、SHA256值及签名算法
在接入第三方功能时,经常要注册提交apk的签名信息 (sha1签名)?,下面列出相关步骤。
获取apk签名信息的步骤:
1)修改apk后缀名为zip,解压得到其中的META-INF文件夹;
2)把META-INF文件夹放到C盘根目录下;
3)在dos面板中, 敲入命令: keytool -printcert -file C:\META-INF\CERTRSA 命令,即可获取sha1签名信息
————————————————————————————>
大神说:一步就能搞定
在dos面板中, 敲入命令:keytool -printcert -jarfile debugapk
手机连接数据线到电脑,安装刷机工具,驱动自动识别后,选择ROOT破解或者获取ROOT,之后2分钟左右,重启,提示成功,,,安装SUPERUSER的APK,可以到360手机助手下载安装,,,就可以进行分配权限了,,,至于刷机工具可以用甜椒,刷机精灵,卓大师,百度一键ROOT,360等等,,,
热心网友
您好,很高兴能帮助您
太简单了创建一个Android的Demo。用GoogleMap 自己的接口里面就有获得当前的位置。获得了数据,使用WebService把数据上传到服务器上(有数据库的电脑)。显示。
这样的Demo网上到处都是
你的采纳是我前进的动力,
记得好评和采纳,答题不易,互相帮助
开发中基本使用到,mark一下,脑子是个好东西,但不可靠,记录方便记忆
基本命令 :
正常情况如下:
SHA1:
这个就是我们的开发版SHA1。
配置完成后,重新打开cmd窗口 在输入最上面的命令 就可以
(一定要关掉cmd 再开才有效果,别浪费time)
以上就是关于如何获取android 签名信息全部的内容,包括:如何获取android 签名信息、android怎样获取应用签名信息、获取apk的签名信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)