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

2024-04-09 1287阅读

因为近期刚针对各应用平台对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备案助手

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

                    公钥、MD5

                    APP备案(Android) - 获取签名证书公钥、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操作结果

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

                    生成cer格式文件

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

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

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

                    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,如下

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

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

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

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


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

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

                    环境介绍

                    当前环境

                    • 本地环境:验证了一下我本地JDK版本已经到了11.0.18了

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

                    • 项目环境:JDK1.8

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

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

                        signingReport(可用)

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

                        效果如图

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

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

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


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

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

                        APK signature

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

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


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

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

                          1. 将 apk 后缀改为 zip,变为可压缩包

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

                          2. 解压后进入 META-INF

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

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

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

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

                          #xxx 替换成对应的rsa文件名即可
                          keytool -printcert -file xxx.RSA 
                          
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]