当前位置:首页 » 安卓系统 » android获取签名md5

android获取签名md5

发布时间: 2023-07-14 21:19:36

① Android基础‘V1V2V3签名’

基础概念
签名:在 APK 中写入一个“指纹”。指纹写入以后,APK 中有任何修改,都会导致这个指纹无效,Android 系统在安装 APK 进行签名校验时就会不通过,从而保证了安全性。
摘要算法: 使用一段简单的看上去随机的不可逆向的固定长度的字符串来表示一个文件的唯一性。 常见的摘要算法如MD5(128个比特位)、SHA-1算法(160/192/256个比特位)。
公钥密码体制:也称非对称算法,特点是 公钥是公开的 ,私钥是保密的。常见的如:RSA。
展开讨论一下RSA:

Android中的签名方案
V1 :基于jarsigner(JDK自带工具,使用keystore文件进行签名) 或 apksigner(Android专门提供的,使用pk8、x509.pem进行签名)。keystore和pk8/x509.pem可以相互转换。
签名原理:首先keystore文件包含一个MD5和一个SHA1摘要。 这也是很多开放平台需要我们上传的摘要数据
签名APK后会在META-INF文件夹下生产CERT.RSA、CERT.SF、MANIFEST.MF三个文件。

在apk中,/META-INF文件夹中保存着apk的签名信息,一般至少包含三个文件,[CERT].RSA,[CERT].SF和MANIFEIST.MF文件。这三个文件就是对apk的签名信息。
MANIFEST.MF中包含对apk中除了/META-INF文件夹外所有文件的签名值,签名方法是先SHA1()(或其他hash方法)在base64()。存储形式是:Name加[SHA1]-Digest。
[CERT].SF是对MANIFEST.MF文件整体签名以及其中各个条目的签名。一般地,如果是使用工具签名,还多包括一项。就是对MANIFEST.MF头部信息的签名,关于这一点前面源码分析中已经提到。
[CERT].RSA包含用私钥对[CERT].SF的签名以及包含公钥信息的数字证书。
  是否存在签名伪造可能:
修改(含增删改)了apk中的文件,则:校验时计算出的文件的摘要值与MANIFEST.MF文件中的条目不匹配,失败。
修改apk中的文件+MANIFEST.MF,则:MANIFEST.MF修改过的条目的摘要与[CERT].SF对应的条目不匹配,失败。
修改apk中的文件+MANIFEST.MF+[CERT].SF,则:计算出的[CERT].SF签名与[CERT].RSA中记录的签名值不匹配,失败。
修改apk中的文件+MANIFEST.MF+[CERT].SF+[CERT].RSA,则:由于证书不可伪造,[CERT].RSA无法伪造。

V2 :7.0新增的
签名后的包会被分为四部分
1. Contents of ZIP entries(from offset 0 until the start of APK Signing Block)
2. APK Signing Block
3. ZIP Central Directory
4. ZIP End of Central Directory
新应用签名方案的签名信息会被保存在区块2(APK Signing Block) 中, 而区块1( Contents of ZIP entries )、区块3( ZIP Central Directory )、区块4( ZIP End of Central Directory )是受保护的, 在签名后任何对区块1、3、4的修改都逃不过新的应用签名方案的检查

V3 :9.0新增的
格式大体和 v2 类似,在 v2 插入的签名块(Apk Signature Block v2)中,又添加了一个新快(Attr块)
在这个新块中,会记录我们之前的签名信息以及新的签名信息,以 密钥转轮的方案,来做签名的替换和升级。这意味着,只要旧签名证书在手,我们就可以通过它在新的 APK 文件中,更改签名 。
v3 签名新增的新块(attr)存储了所有的签名信息,由更小的 Level 块,以 链表 的形式存储。
其中每个节点都包含用于为之前版本的应用签名的签名证书,最旧的签名证书对应根节点,系统会让每个节点中的证书为列表中下一个证书签名,从而为每个新密钥提供证据来证明它应该像旧密钥一样可信。
这个过程有点类似 CA 证书的证明过程,已安装的 App 的旧签名,确保覆盖安装的 APK 的新签名正确,将信任传递下去。
注意: 签名方式只支持升级不支持降级,如安装了V2的包,不能覆盖替换为V1的包。

参考
Android App签名(证书)校验过程源码分析
新一代开源Android渠道包生成工具Walle
Android 签名机制 v1、v2、v3

② android studio怎么查看md5码

第一种方法,使用keytool

首先我们得在系统的环境变量中配置下keytool,keytool是位于我们JDK安装的bin目录下,如下图

好了到这里就结束了,在实际开发中为了避免注册时弄错签名,建议时打包后在获取apk的签名.

③ android 微信开放平台,如何获取应用签名

在微信开放平台申请app应用的时候,遇到要填写 应用签名 一栏。

找到签名文件
keytool -list -v -keystore xxx.keystore
证书指纹节点下岩卜弯的MD5值转成小写,去掉冒号。

首先跟随 生成keystore和应用签名 ,生成 .jks 签名文件,
然后跟随 微信开放平台Android应用签名的本质及如何获取 的第三、四步,生成带签名的apk,并用专门的工具查看应用签名。

最后用工具查看到应用签名后,我们发现,其实它就是keystore文件的MD5值。
这样,我们就能够 查看应用签名了

如果你在 修改签名 后,进入微信授权页面失败,且提粗闷示"应用签名与微信开放平台上的签名不一致",有可能是 微信缓存 的缘故。
根据 android之微信开放平台修改签名 ,只要清理微信缓存,或重装微信即可。

接下来还有一个问题没解决:

解决方法参考 Android Studio直接运行调试签名包
但这样的做法会显示暴露keystore信息,所以跟随 Android Studio的两种模式及签名配置 的后半部分,可以让弊蚂项目间接引入keystore信息。

④ 通过AndroidStudio获取签名文件信息

1、查看apk安姿闭乎装文件的签名信息
右键解压apk,态源打开其中的META-INF文件,得到其中的CERT.RSA文件。
在AndroidStudio中打开 Terminal 执行命令keytool -printcert -file XXX(XXX为CERT.RSA文件路迹悉径)可以查看签名的MD5、SHA1、SHA256值。
2、直接查看签名文件的信息
在AndroidStudio中打开 Terminal 执行命令keytool -list -v -keystore XXX(XXX为签名文件路径)
再输入密码可以查看签名的MD5、SHA1、SHA256值。

效果图:

⑤ Android查看应用签名方法

查看应用签名的MD5、SHA1、SHA256值及签名算法。

查看keystore文件签名信息,前提要有keystore文件和密钥,才能够获取keystore文件的签名信息。

方法一:(适用于 AS)
1)打开 AS工具窗口栏右边的 Gradle -> Project -> app -> Tasks -> android -> signingReport,双击运行 signingReport;

在没有keystore文件和密钥的情况下,要想查看我们所需应用的签名信息,就需要借助 keytool 工具来完成。
首先解压要查看的apk包,通过数据证书管理工具 keytool 查看早禅姿apk的签名信息。具体步骤如下:
1)将apk修改后缀为 .rar 文件后进行解压;
2)进入解压后的 META-INF 目录,找到该目录下的 xxx.RSA 文件;
3)通过命令 cmd 打开DOS窗口,输入命令 : keytool -printcert -file [RSA文件路径]

在查看应用签名信陆绝息过程中,可能会遇到以下几个问题:

定位 keytool.exe 工具所在的目录,使用相关操作命令查袭败看签名信息;

JKS(Java KeyStore) :是 Java 的 keytools 证书工具支持的证书私钥格式。jks 包含了公钥和私钥,可以通过 keytool 工具来将公钥和私钥导出。因为包含了私钥,所以 jks 文件通常通过一个密码来加以保护。一般用于 Java 或者 Tomcat 服务器。
PKCS #12 :定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。
定位 keytool.exe 工具所在的目录,使用操作命令转换证书格式;

⑥ 如何获取android 签名信息

android中有时候需要获取应用的签名信息,签名信息一般有:公钥,算法名,MD5值,序列号。要想获取这些信息首先该APK应用要有系统权限。

1. 在配置文件里添加系统权限:android:sharedUserId="android.uid.system"

2. 获取签名信息的字符信息:

String signature_key = "";

try{

PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkgName,
PackageManager.GET_SIGNATURES);

Signature[] signatures =
packageInfo.signatures;

SignatureKey.parseSignature(signatures[0].toByteArray());

} catch (NameNotFoundException e) {

e.printStackTrace();

} catch (NullPointerException e) {

e.printStackTrace();

}

(1).其中packageInfo 得到的是指定包名的签名信息的字符串。另提及多说一句:在程序中我们一般使用

List list =
mPackageManager.getInstalledPackages(0);来得到所有的安装包的信息,这其中包括应用名,包名,大小....

(2).
其中[]signatures里是存放的签名的字符串数组。我们一般取用第一个signatures[0]来做为该应用的签名信息。这里有一个疑惑就是为什么得到的是一个字符串的数组列表,而不是一个字符串,也有的开发者采用:

StringBuilder builder = new StringBuilder();

for(Signature sign: signatures
){
builder.append(sign.toCharsString());
builder.append("/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 =
MessageDigest.getInstance("MD5");
md5MessageDigest.update(paramArrayOfByte);//
byte[]
tempByte = md5MessageDigest.digest();
int i =
tempByte.length;
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)
{
e.printStackTrace();
}
return
null;
}

(1). 其中参数就是上一步得到的签名的byte数组。

4. 获取公钥,签名算法,签名序列号

public static void 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());//算法名

System.out.println("pubKey:" +
pubKey);

System.out.println("signNumber:" +
signNumber);//证书序列编号

System.out.println("subjectDN:"+cert.getSubjectDN().toString());

} catch (CertificateException e)
{

e.printStackTrace();
}
}

5. 电脑查看APK签名信息

查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件
1.keytool
-printcert -file META-INF/CERT.RSA
命令是:keytool -printcert -file
<签名文件RSA的路径>
2.jarsigner -verify -verbose -certs Superuser.apk
此条未验证成功

⑦ 使用CMD命令查看Android应用签名证书的SHA1、MD5、SHA256值

使用命令进入到key.keystore的目录;

使用命令:keytool -list -v -keystore key.keystore(key.keystore  是你的签名文件的)

然后回车

提示输入密码: 输入你的证书的密码

输入密码时命令行不会显示任何内容,你只需要输入正确的密码即可,输入完后回车;

输入正确,回车后,就会看到:MD5,SHA1,SHA256的值。

热点内容
取消微信设置密码在哪里设置 发布:2025-02-05 22:48:49 浏览:666
mysql内存存储 发布:2025-02-05 22:30:39 浏览:569
静态存储区堆栈 发布:2025-02-05 22:09:11 浏览:101
js加密算法 发布:2025-02-05 22:06:35 浏览:230
python3graphics 发布:2025-02-05 21:36:57 浏览:511
为什么英雄联盟一个服务器进不去 发布:2025-02-05 21:36:12 浏览:182
服务器搭建网站开发教材 发布:2025-02-05 21:31:57 浏览:567
pythonrose 发布:2025-02-05 21:31:46 浏览:923
php数组从小到大排序 发布:2025-02-05 21:26:01 浏览:325
单片机存储器扩展 发布:2025-02-05 21:17:35 浏览:966