一、先把xx.apk后缀名改成xx.zip并解压
1.先把xx.apk后缀名改成xx.zip并解压2.在META_INF目录下找到xxx.RSA文件
3.确保安装了jdk并且正确配置了环境变量
4.cmd中执行keytool -printcert -file xxxx.RSA目录
二
1.确保安装了jdk并且正确配置了环境变量。2.cmd中执行keytool -printcert -jarfile xxx.apk
运行效果如下:
可以看出运行效果完全一样
这里主要是属性keytool命名 以及 keytool -printcert 的用法
这样在查找签名文件冲突的时候就可以查看不同的apk对应的签名文件是否一样。
三、对xxxx.keystore文件获取MD5,签名信息
假如我们想要获取xxxx.keystore的签名信息和md5值,同样可以用keytool命名
1.确保安装了jdk并且正确配置了环境变量
2.在cmd中执行 keytool -list -v -keystore xxxx.keystore -storepass 签名文件密码
运行效果如下:
或者 手动输入密码:
cmd中执行 keytool -list -v -keystore xxxx.keystore
运行效果如下:
可以看出运行效果完全一样
======================补充================
1. 通过命令行工具(需证书文件)
如果你有云证书的 .keystore
或 .jks
文件,可以使用 Java 的 keytool
或 openssl
工具提取公钥信息:
方法一:使用 keytool(JDK 自带)
# 查看证书详细信息(包含公钥指纹)
keytool -list -v -keystore your_certificate.keystore -alias your_alias
# 导出证书为 CRT 格式
keytool -exportcert -alias your_alias -keystore your_certificate.keystore -file certificate.crt
# 查看证书中的公钥内容
keytool -printcert -file certificate.crt
方法二:使用 openssl(需额外安装)
# 将 JKS 转换为 PKCS12 格式
keytool -importkeystore -srckeystore your_certificate.keystore -destkeystore temp.p12 -deststoretype PKCS12
# 从 PKCS12 中提取公钥证书
openssl pkcs12 -in temp.p12 -nokeys -out certificate.crt
# 查看公钥内容
openssl x509 -inform PEM -in certificate.crt -noout -text
2. 通过 Android Studio 获取(需 APK 文件)
如果你已经有打包好的 APK 文件,可以通过 Android Studio 提取签名信息:
- 将 APK 文件拖放到 Android Studio 中
- 右键点击 APK 文件,选择 Show in Explorer(Windows)或 Reveal in Finder(Mac)
- 打开终端,进入 APK 文件所在目录
- 使用以下命令解压 APK 并提取签名信息:
# 解压 APK
unzip your_app.apk -d temp
# 提取 CERT.RSA 文件
cd temp/META-INF
# 查看证书信息(包含公钥)
keytool -printcert -file CERT.RSA
4. 使用第三方工具
有一些第三方工具可以帮助提取证书公钥:
APK 签名查看器:
- 如 APK Signature Scanner(Android 应用)
- 直接上传 APK 文件即可查看签名信息
在线工具:
- 如 CertUtil
- 需先将证书导出为
.crt
格式,再上传查看
=============补充获取公钥==================================================
以下是针对通过不同方式获取信息时,只有sha1
和sha256
,却没有公钥和 MD5 的解决办法:
方法一:借助 OpenSSL 工具(需提前安装配置)
- 确保你已经安装了 OpenSSL 工具,并且在命令行中可以直接调用(配置好环境变量 )。
- 在命令行中,进入到
certificate.crt
所在的目录,执行以下命令: -
openssl x509 -inform der -in certificate.crt -noout -text
方法二:使用 Java 代码提取(需有 Java 环境)
编写一段简单的 Java 代码来读取证书并提取公钥,示例代码如下:
import java.io.FileInputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.PublicKey;
public class ExtractPublicKey {
public static void main(String[] args) {
try {
// 加载证书文件
FileInputStream fis = new FileInputStream("certificate.crt");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(fis);
// 获取公钥
PublicKey publicKey = cert.getPublicKey();
System.out.println("公钥内容: " + publicKey);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
将上述代码保存为 .java
文件(比如 ExtractPublicKey.java
),然后通过 javac ExtractPublicKey.java
编译(确保已配置好 Java 开发环境 ),再执行 java ExtractPublicKey
,控制台就会输出公钥的具体信息,形式类似 Sun RSA public key, 2048 bits
以及后续的密钥参数等内容 。
这是 Java 代码编译报错,错误原因及解决:
从报错信息看,核心问题是代码文件里存在非法字符
\ufeff
,这通常是文件带 BOM 头导致的,按以下步骤解决:1. 清理非法字符(关键)
用纯文本编辑器(如 Notepad++、VS Code )打开
ExtractPublicKey.java
文件:
- Notepad++:点击顶部菜单
编码
→ 选转为 UTF-8 无 BOM 编码
,再保存文件。- VS Code:右下角点编码显示(如
UTF-8
)→ 选通过编码保存
→ 选UTF-8
,覆盖保存。2. 重新编译
清理后,回到命令行,确保在代码文件目录下,重新执行:
javac ExtractPublicKey.java java ExtractPublicKey