Android开发签名校验

devtools/2025/2/10 21:04:17/
Android开发签名校验

有一些平台需要我们做签名校验才能通过审核,其实做Android签名校验也不是很难

直接上代码:

class SignCheck {/*** 获取应用的签名*/private fun getCer(mContext: Context): String? {var packageInfo: PackageInfo? = nulltry {packageInfo = mContext.packageManager.getPackageInfo(mContext.packageName, PackageManager.GET_SIGNATURES)} catch (e: PackageManager.NameNotFoundException) {e.printStackTrace()}val cert = packageInfo?.signatures?.get(0)?.toByteArray()val input: InputStream = ByteArrayInputStream(cert)var cf: CertificateFactory? = nulltry {cf = CertificateFactory.getInstance("X509")} catch (e: Exception) {e.printStackTrace()}var c: X509Certificate? = nulltry {c = cf!!.generateCertificate(input) as X509Certificate} catch (e: Exception) {e.printStackTrace()}var hexString: String? = nulltry {val md = MessageDigest.getInstance("SHA1")val publicKey = md.digest(c!!.encoded)hexString = byte2HexFormatted(publicKey)} catch (e1: NoSuchAlgorithmException) {e1.printStackTrace()} catch (e: CertificateEncodingException) {e.printStackTrace()}return hexString}//这里是将获取到得编码进行16 进制转换private fun byte2HexFormatted(arr: ByteArray): String {val str = StringBuilder(arr.size * 2)for (i in arr.indices) {var h = Integer.toHexString(arr[i].toInt())val l = h.lengthif (l == 1) h = "0$h"if (l > 2) h = h.substring(l - 2, l)str.append(h.uppercase(Locale.getDefault()))if (i < arr.size - 1) str.append(':')}return str.toString()}/*** 检测签名是否正确*/fun checkSign(mContext: Context, callback:() -> Unit){getCer(mContext)?.let { cer ->if(cer.trim { it <= ' ' } == getRealCer(mContext).trim { it <= ' ' }){callback()}else{AlertDialog.Builder(mContext).setTitle("签名校验失败").setMessage("存在签名异常,请在官方下载最新的APP").setCancelable(false).setPositiveButton("确定") { _, _ -> exitProcess(0) }.show()}} ?: callback()}/*** @desc : 比对的是sha1* **/private fun getRealCer(mContext: Context) : String{return when(mContext.packageName){"com.xx.com" -> "15:xx:xx:xx:BA"else -> "6D:xx:xx:xx:B8"}}
}

使用:

new SignCheck().checkSign(mContext, new Function0<Unit>() {@Overridepublic Unit invoke() {if(!SPNoCleanUtil.getIsAgreeYSAndXY()){SPNoCleanUtil.saveIsAgreeYSAndXY();((MyApplication)getIView().getContext().getApplicationContext()).initSDK();}if(SPNoCleanUtil.getIsAgreeYSAndXY() && ModifySetUtils.IS_HUAWEI_PAY){// 初始化华为联运相关JosApps.getJosAppsClient(StartupActivity.this).init();}//获取全局系统参数getPresenter().getGlobalSysParams(new StartupPresenter.GlobalSysParamsFinishListener() {@Overridepublic void onFinish() {GlobalSysParamResult.DataBean globalBean = SPNoCleanUtil.getObject(SPKey.SYSPARAM_GLOBAL);if(null != globalBean && !TextUtils.isEmpty(globalBean.getCoopenAdid())){IntentUtils.startAdActivity(mContext,AdStartupActivity.START_UP_TYPE,globalBean.getCoopenAdid(),1 );} else {if (ModifySetUtils.IS_NEED_GUIDE_IMAGE && !SPNoCleanUtil.getBoolean(SPKey.GUIDE, false)) {IntentUtils.startIntroductionActivity(mContext);} else if (!SPUtils.getIsLogin()) {IntentUtils.startGuideActivity(mContext);} else {IntentUtils.startStartToMainActivity(mContext);}}finish();}});return null;}});

Android开发或者鸿蒙开发需求或者问题的可以私信我,我每天都看私信的


http://www.ppmy.cn/devtools/157733.html

相关文章

[权限提升] Linux 提权 维持 — 系统错误配置提权 - 通配符(ws)注入提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;通配符&#xff08;ws&#xff09;注入提权原理 通配符注入提权的核心是利用通配符的扩展特性&#xff0c;在命令执行时生成意外的参数或文件名&#xff0c;从而改变命令的行…

DeepSeek Janus Pro 论文解析

目录 介绍 统一的多模态理解与生成 图像理解任务 图像生成任务 统一模型的好处 Janus 和 Janus Pro 架构 Janus Pro主要设计原理 Janus Pro 图像编码器 LLM 处理和输出 Rectified Flow Janus Pro 训练流程 第一阶段——适应 第二阶段——统一预训练 第三阶段——监…

CEF132 编译指南 Windows 篇 - 拉取 CEF 源码 (五)

1. 引言 获取 CEF 132 源码是开始编译工作的前提和关键步骤。在完成 depot_tools 的安装和配置后&#xff0c;我们需要通过正确的方式下载和同步 CEF 的源代码。由于 CEF 项目依赖于 Chromium 的大量组件&#xff0c;因此源码的获取过程需要特别注意同步策略和版本管理&#x…

uniapp实现人脸识别(不使用三方插件)

uniapp实现人脸识别 内容简介功能实现上传身份证进行人脸比对 遇到的问题 内容简介 1.拍摄/相册将身份证照片上传到接口进行图片解析 2.使用live-pusher组件拍摄人脸照片&#xff0c;上传接口与身份证人脸进行比对 功能实现 上传身份证 先看下效果 点击按钮调用chooseImage…

自动化测试(selenium篇)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是自动化测试 自动化测试通俗一些来讲&#xff0c;就是相当于将人工测试手段进行转换&#xff0c;让代码去自动执行。 自动化测试主要分为&#xff1a;单元…

如何在Windows中配置MySQL?

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它支持多种操作系统平台&#xff0c;其中包括Windows。无论是开发者进行本地开发&#xff0c;还是管理员为应用程序配置数据库&#xff0c;MySQL都是一个非常流行的选择。本篇文章将详细介绍如何在Windows操作系统中…

如何利用maven更优雅的打包

最近在客户现场部署项目&#xff0c;有两套环境&#xff0c;无法连接互联网&#xff0c;两套环境之间也是完全隔离&#xff0c;于是问题就来了&#xff0c;每次都要远程到公司电脑改完代码&#xff0c;打包&#xff0c;通过网盘&#xff08;如果没有会员&#xff0c;上传下载慢…

Baklib优化数字化内容管理用科技提升商业效率与增值潜力

内容概要 在当今数字化迅速发展的时代&#xff0c;数字化内容管理已成为企业提升竞争力的重要手段。Baklib作为一款强大的智能优化内容管理系统&#xff0c;通过先进的科技手段&#xff0c;帮助企业在内容管理和数据整合方面实现高效运作。Baklib 是什么类型的工具&#xff0c…