一、判断Apk是否签名
用命令:jarsigner -verify -verbose -certs <apk文件>
1、如果有Android Debug字样就是debug
2、如果已经签名: [证书的有效期为13-8-31 下午2:31至41-1-16 下午2:31]
二、判断Apk签名是否一致
jdk 需要安装;想查demoapk所使用的签名的fingerprint,可以这样做:
1、查找apk里的rsa文件
Windows 平台:
> jar tf demo apk |findstr RSA
Linux 平台:
$ jar tf demo apk |grep RSA
META-INF/CERTRSA
2、 从apk中解压rsa文件
jar xf demo apk META-INF/CERTRSA
3、获取签名的fingerprints
keytool -printcert -file META-INF/CERTRSA
证书指纹:
MD5: 5A:5A:96:63:8E:EF:FC:66:9E:BC:1C:2A:A9:1E:E5:95
SHA1: 44:BD:33:2D:C5:21:AE:78:D5:04:92:1A:39:FD:AC:01:E2:32:3C:AB
SHA256: 2F:C0:A3:8C:0D:42:84:70:48:78:44:A4:2E:64:5B:50:B3:B3:1E:33:94:62:A3:9F:2F:10:DD:EF:D7:CF:02:0B
签名算法名称: SHA1withRSA
版本: 3
两个apk是否同签名,比较签名的MD5码或SHA1码 ,一样就是相同的,反之,不是。
手机怎么导出apk签名
选择 Android --> Export Android Application --> next
这里需要一个keystore 也就是一个签名钥匙(很重要) 如果有的话可以直接选择
注意这里点击密钥存储路径的时候会d出这个框,让你选择存放的位置以及你这个密钥的文件名。
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
此条未验证成功
1)使用jdk的keytool工具生成签名用的证书> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERTkeystore 创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERTkeystore ---- 证书保存的文件名 CERT ---- 证书的别名 10000 ---- 10000天的有效期 2048 ---- 默认为1024 bits,Android 建议使用2048 bits或更高其他的详细信息可以使用keytool -help查看帮助 证书生成后使用如下命令可以查看证书的信息:> keytool -list -alias CERT -keystore CERTkeystore
2)使用jdk的jarsigner工具对apk文件签名> jarsigner -verbose -keystore CERTkeystore to_signapk CERT 签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERTkeystore ---- 证书保存的文件名 CERT ---- 证书的别名 待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。如果不想创建过程输出太多信息,可以删除“-verbose” 。上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signedakp,只需将 to_signapk 改为 -signedjar to_signapk signedakp 即可。签名后可以使用如下命令验证是否签名成功: > jarsigner -verify to_signapk 如果需要查看更详细的验证信息,可修改为:> jarsigner -certs -verbose -verify to_signapk
3)使用android sdk的zipalign工具优化已签名的apk文件> zipalign -v 4 unalignedapk alignedapk 注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalignexe。--ITJOB
以下介绍查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5、SHA1、SHA256值和签名算法等信息。
1、查看自己的应用签名
可以通过两种方式查看
(1) debug的apk通过Eclipse查看,如下图:
(2) 某个keystore签名的应用,通过以下命令查看
keytool -list -keystore E:\Trinea\keystore\appsearchkeystore,会要求输入签名密码,默认为android,如下图:
2、查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERTRSA文件,通过keytool -printcert -file META-INF/CERTRSA命令打印证书信息,如微信证书信息如下图:
可以查看签名的MD5、SHA1、SHA256值及签名算法
一般在证书包里面有个文档,上面都是有签名的。
如果没有,那么久需要下载一个工具GenSignature安装到手机上面。
安装好上述工具之后把apk包下载到手机上安装好。
安装好之后打开GenSignature,然后输入你apk文件的包名,就可以查看签名了。
两种方式,一种开发工具eclipse,还有就是用apktool工具。I、只要Run As Android Application 过,到工作目录的bin文件夹下就能找到与项目同名的apk文件。II、 A选中项目,右键=》Andoid Tools=》Export Unsigned Application Package,直接保存,未签名的。 B选中项目,右键=》Andoid Tools=》Export Signed Application Package,后面一步步的去做,签过名的。 APK签名主要有两种:1 使用特殊的key签名可以获取到一些不同的权限。2 APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。
菜单菜单键,键入cmd命令进入命令模式。如图:
命令模式中,进入JDK的安装目录的Bin子目录下。(我的JDK安装在E盘,所以先进入E盘,然后再进入JDK安装目录)
通过keytoolexe 工具来创建keystore库
输入以下命令:
keytool -genkeypair -alias - mydemokeystore -keyalg RSA -validity 100
-keystore mydemokeystore
命令说明如下:
-genkeypair :指定生成数字证实
-alias :指定生成数字证书的别名
-keyalg:指定生成数字证书的算法 这里如RSA算法
-validity:指定生成数字证书的有效期
-keystore :指定生成数字证书的存储路径。 (这里默认在keytoolexe 目录下)
回车 出现如图交互式界面 输入数字证书费密码 作者 公司等详细信息
如图 :
完成后,keystore库创建完成,你可以在指定的保存目录下找到 如图:
使用jarsigner命令对未签名的APK安装包进行签名。使用JDK安装目录下bin子目录下的jarsignerexe工具来进行签名。
然后把未签名的apk也拷贝到此目录。如图:
使用如下命令进行签名:
jarsigner -verbose -keystore mydemokeystore -signedjar
-Noteapk Notesapk mydemokeystore
以上命令的说明:
-verbose:指定生成详细输出
-keystore:指定数字证书存储路径
-signedjar:该选项的三个参数为 签名后的apk包 未签名的apk包 数字证书别名
注意有效期哦。
签名后的apk 如图:
sdk目录下tool目录下使用zipalignexe工具优化APK安装包。
将已经签名的apk包放在zipalignexe同目录下 如图:
使用如下命令:
zipalign -f -v 4 -Noteapk -Notesapk
命令说明:
-f :指定强制覆盖已有文件
-v 指定生成详细输出
4:指定档案整理基于的字节数 一般是4 也有基于32位的。
-Noteapk :优化前APK
-Notesapk 优化后的APK
运行命令后,在该目录下生成一个-Notesapk,这个就是优化过的APK安装包
,该安装包可以对外发布。
以上就是关于如何判断 Android 应用的 Apk 签名是否一致全部的内容,包括:如何判断 Android 应用的 Apk 签名是否一致、手机怎么导出apk签名、如何获取android 签名信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)