APP备案(Android) - 获取签名证书公钥、MD5

因为近期刚针对各应用平台对APP备案时间节点要求进行了统一整理,然后隔天就被要求提供一下app相关的的公钥和MD5,虽然很快就解决了这个事情,但忍不住又稍微衍生了一下,但行小步,莫问远方吧

关联Blog

  • APP备案(Android) - 各应用平台对APP备案时间节点要求
  • APP备案(Android) - 获取签名证书公钥、MD5

Tip:如果着急获取公钥和MD5可以直接用便捷工具,反之有兴趣的话可以看看其他获取公钥和MD5的方式

    • 基础认知
      • 证书公钥(Public Key)
      • MD5(Message Digest Algorithm 5)
    • 便捷工具
      • 公钥、MD5
    • 核心方式
      • 准备工作
      • 公钥
      • MD5
    • 核心方式 - MD5异常场景处理方式
      • 环境介绍
      • signingReport(可用)
      • jadx 验证(未亲测,应可用)
      • RSA文件(亲测,未必全有效)

基础认知

证书公钥(Public Key)

  • 加密通信: 在公钥加密系统中,公钥用于加密数据,而私钥用于解密。在安全通信中,通信双方可以交换公钥,并使用对方的公钥加密数据,保证了数据的机密性。
  • 数字签名验证: 证书公钥也用于验证数字签名。数字签名是对数据的摘要,通过使用私钥对摘要进行签名,然后使用公钥来验证签名的有效性。这确保了数据的完整性和真实性。

MD5(Message Digest Algorithm 5)

需要注意的是,MD5 目前不再被认为是安全的加密算法,因为它容易受到碰撞攻击(多个不同的输入产生相同的摘要)。在安全性要求较高的情况下,应考虑使用更强大的哈希算法,例如 SHA-256 或 SHA-3。

  • 数据完整性: MD5 是一种哈希函数,用于生成数据的唯一固定长度的摘要。这个摘要通常用于验证数据的完整性。如果原始数据发生变化,其 MD5 摘要也会发生变化,因此接收方可以比较原始数据的 MD5 摘要以检测是否存在任何篡改
  • 文件校验: MD5 常用于校验文件完整性。在下载文件后,可以计算文件的 MD5 值并与提供的 MD5 值进行比较,以确保文件未被损坏或篡改
  • 密码存储: 尽管 MD5 不再被推荐用于密码存储,但在过去的一些应用中,它被用于生成密码的散列值。现代应用通常使用更安全的哈希算法,如 SHA-256。

便捷工具

近期基本所有国内Android应用平台因为工信部的要求都需要进行APP备案,在APP备案中需要提供公钥、MD5,所以很多工具app应运而生,这种工具我并不确定是否以后还一直可以使用,故除此之外我还提供了另一种核心方式,万变不离其中~

APP备案助手

在这里插入图片描述

公钥、MD5

在这里插入图片描述


核心方式

准备工作

因为我是使用Demo做演练,所以我需要先 生成 keystore、jks 签名证书,然后在 反编译keystore、jks签名证书 获取部分信息

#生成jsk格式的签名证书
keytool -genkeypair -v -keystore testkeyly.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testkeyly -storetype JKS

公钥

通过 keytool 工具获取签名证书

#示例 your_alias、your_keystore 分别输入自己的签名信息 & certificate 证书名称(可自行更改)
keytool -export -alias your_alias -file certificate.cer -keystore your_keystore.keystore# demo 示例
keytool -export -alias tmpkey -file certificate.cer -keystore tmpkey.jks 

cmd操作结果

在这里插入图片描述

生成cer格式文件

在这里插入图片描述

直接在详细信息获取公钥即可

在这里插入图片描述

MD5

如果当前本地JDK环境用的1.8的话,可以直接采用如下方式,逆向获取证书信息节课,如没有MD5则查看后续的异常处理方式

逆向签名 - keystore、jks签名文件

# 示例 xxx 输入自己的签名文件名即可
keytool.exe -list -v -keystore xxx.keystore或xxx.jks#demo 示例
keytool -list -v -keystore tmpkey.jks

正常的话签名信息中可以看到MD5,如下

在这里插入图片描述

看到这里可能你也遇到不正常的场景了…

例如签名信息中根本不包含MD5信息… 而且密钥库类型也不同…

在这里插入图片描述


核心方式 - MD5异常场景处理方式

查了一下资料,发现可能高于JDK1.8的环境 移除了 这些 Disable MD5 or MD2 signed jars,导致均无法通过 keyTool获取到 MD5 信息

环境介绍

当前环境

  • 本地环境:验证了一下我本地JDK版本已经到了11.0.18
    在这里插入图片描述
  • 项目环境:JDK1.8

在这里插入图片描述

  • Tip:其实下面的方式都是曲线操作,有兴趣的可以去看一下采用 openssl 获取MD5的方式,因最近减法还没做完,我就先不去深挖了,有机会我再去浅学一下…

signingReport(可用)

执行方式 + 默认配置并未设置签名信息,故该处标红区域的MD5值不对

效果如图

在这里插入图片描述

build.gradle中声明对应的签名信息,然后重新执行该操作(可参考:debug模式下打出release签名包)

在这里插入图片描述


jadx 验证(未亲测,应可用)

早以前我就记录过 Jadx快速实现Apk反编译 ,这里就不再赘述了,图就直接套了…

APK signature

  • Modulus/模数 为公钥,十进制显示的
  • MD5 Fingerprint/MD5签名,APP备案填写时需要去掉空格,填写32位长度的十六进制数据

在这里插入图片描述


RSA文件(亲测,未必全有效)

RAS本身是一种加密方式,这里的RSA文件就是加密文件

  1. apk 后缀改为 zip,变为可压缩包
    在这里插入图片描述

  2. 解压后进入 META-INF

在这里插入图片描述

  1. 找一个.RSA后缀文件(如果没有该文件,那么这个apk签名可能存在问题)

在这里插入图片描述

4.使用 keytool命令获取MD5签名(有的可能获取不到,例如金融型app会进行特殊的二次加密)

#xxx 替换成对应的rsa文件名即可
keytool -printcert -file xxx.RSA 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264373.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为 Compose MultiPlatform 添加 C/C++ 支持(1):在 kotlin 中使用 cinterop 实现与 C/C++ 互操作

前言 在安卓中我们可以使用 jvm 提供的 jni 方便的编写 C/C 代码并与 java/kotlin 互操作。 但是当使用 kotlin MultiPlatform 时想要调用 C/C 代码将变得麻烦甚至是不可用,因为对于 Android 和 Desktop 来说依旧使用的是 jvm ,所以只要稍微适配一下也…

二分查找|滑动窗口|前缀和|LeetCode209: 长度最小的子数组

长度最短的子数组 作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 滑动窗口 题目 给定一个含有 n 个正整数的数组和一个正整数 target…

大数据HCIE成神之路之数据预处理(1)——缺失值处理

缺失值处理 1.1 删除1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 填充1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.2.3 实验操作步骤1.2.4 结果验证 1…

浅谈SPI机制之ServiceLoader的原理

大家好,我是G探险者。 今天我们聊聊SPI机制,先从JDK的ServiceLoader 类谈起。 1. ServiceLoader 介绍 ServiceLoader 类是 Java Development Kit (JDK) 的一部分,用于加载服务提供者。这个类是 Java 的服务提供者加载机制(SPI&…

Gitzip插件【Github免翻下载】

今天给大家推荐一个github下载的插件,平常大家下载应该无外乎就是以下两种: Download zip利用git clone 但是这两种各有各的弊端,前者一般需要科学上网才可以,后者下载不稳定经常中途断掉。 今天给推荐一个款浏览器插件-Gitzip.大…

力扣112. 路径总和(带讲解回溯过程和遇到的递归问题)

题目: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节…

如何使用 Google 的 Gemini

Google Gemini介绍 Google Gemini是谷歌发布的人工智能大模型,能够在从数据中心到移动设备等不同平台上运行。 Gemini包括一套三种不同规模的模型: Gemini Ultra是最大、功能最强大的类别,被定位为GPT-4的竞争对手;Gemini Pro是…

HTTP与HTTPS的区别:安全性、协议地址和默认端口等比较

目录 ​编辑 作者其他博客链接: 一、概述 二、HTTP与HTTPS的区别 安全性 协议地址 默认端口 性能影响 三、比较与评估 浏览器支持 部署和维护成本 隐私保护 四、最佳实践建议 作者其他博客链接: 深入理解HashMap:Java中的键值对…

「Verilog学习笔记」多bit MUX同步器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 输入数据暂存在data_reg中,使能信号data_en用打两拍的方式跨时钟域传输到时钟域B,最后data_out根据使能信号更新数据。data_en信号在A时钟域用一个D…

C++笔记之重载和重写辨别

C笔记之重载和重写辨别 code review! 文章目录 C笔记之重载和重写辨别重载(overloading)重写(Overriding) 在C中,重载(overloading)和重写(overriding)是面向对象编程中…

安装 DevEco Studio 后不能用本地 Node.js 打开

安装 DevEco Studio 后第一次打开时,不能用本地 Node.js 打开 答:因为本地 Node.js 文件夹名字中有空格 Node.js路径只能包含字母、数字、“。”、“_”、“-”、“:”和“V” 解决方法: 1.修改文件夹名称 2.重新下载 注意:找一…

Java Web——过滤器 监听器

目录 1. Filter & 过滤器 1.1. 过滤器概述 1.2. 过滤器的使用 1.3. 过滤器生命周期 1.4. 过滤器链的使用 1.5. 注解方式配置过滤器 2. Listener & 监听器 2.1. 监听器概述 2.2. Java Web的监听器 2.2.1. 常用监听器 2.2.1.1. ServletContextListener监听器 …