在jar里限制指定的包名才可调用(白名单)。

1. 在jar包中定义一个接口,例如 用于检查传入的hash值是否匹配预设的值。
2. 在调用接口的地方,获取当前应用的hash值。
3. 将当前应用的hash值与预设的值进行比较,如果匹配,则允许调用接口;否则,拒绝调用。

一、调用者

public static Impl getInstance(Context context, ICallback iCallback){if (instance == null){if (checkHashForInstance(context)) {instance = new Impl();}} else {throw new SecurityException("validation failed during instance creation.");}}return instance;}
二、实现类
public class HashValidator {final static String whiltename ="com.xxx.xxxx";public static boolean checkHashForInstance(Context context) throws InsufficientPermissionException {// 获取当前应用的包名String packageName = context.getPackageName();// 计算包名的 HASH 值String calculatedHash = calculateHashFromPackageName(packageName);// 根据预设的 hash 值进行校验String presetHash = calculateHashFromPackageName(whiltename);Logs.d("package_name "+ packageName);if (!presetHash.equals(calculatedHash)) {// 校验失败,抛出自定义异常throw new InsufficientPermissionException("Insufficient permission during instance creation.");}// 校验成功return true;}private static String calculateHashFromPackageName(String packageName) {try {MessageDigest messageDigest = null;messageDigest = MessageDigest.getInstance("SHA-256");byte[] hashBytes = messageDigest.digest(packageName.getBytes());StringBuilder hexStringBuilder = new StringBuilder();// 将哈希字节数组转换为十六进制字符串for (byte hashByte : hashBytes) {hexStringBuilder.append(String.format("%02X", hashByte));}// 返回计算得到的哈希值return hexStringBuilder.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();// 在实际应用中可能需要处理 NoSuchAlgorithmException 异常return null;}}
}

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

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

相关文章

Apache Maven简介

Maven 简介 Apache Maven 是一个用于项目构建、依赖管理和项目信息管理的强大工具。它基于项目对象模型(Project Object Model,POM)进行构建,通过描述项目的结构和依赖关系来管理项目的构建过程。 以下是 Apache Maven 的一些关键原理和工作流程: 项目对象模型(POM)…

网络 - OkHttp

一、概念 二、基本使用 2.1 get请求 fun getCall() {//创建客户端val client OkHttpClient.Builder().connectTimeout(5000, TimeUnit.MILLISECONDS).build()//创建请求val request Request.Builder().get().url("https://www.baidu.com").build()//创建任务val…

python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技…

【数据结构与算法初学者指南】【冲击蓝桥篇】String与StringBuilder的区别和用法

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

docker打包当前dinky项目

以下是我的打包过程&#xff0c;大家可以借鉴。我也是第一次慢慢摸索&#xff0c;打包一个公共项目&#xff0c;自己上传。 如果嫌麻烦&#xff0c;可以直接使用我的镜像&#xff0c;直接跳到拉取镜像&#xff01; <可以在任何地方的服务器进行拉取> docker打包当前din…

LLMs之Gemma:Gemma(Google开发的新一代领先的开源模型)的简介、安装、使用方法之详细攻略

LLMs之Gemma&#xff1a;Gemma(Google开发的新一代领先的开源模型)的简介、安装、使用方法之详细攻略 导读&#xff1a;此文章介绍了Google推出的新一代开源模型Gemma&#xff0c;旨在帮助研发人员负责任地开发AI。 背景&#xff1a; >> Google长期致力于为开发者和研究人…

如何在 非C盘 安装 WSL?

来源&#xff1a;https://superuser.com/questions/1572834/is-there-any-way-to-install-wsl-on-non-c-drive 首先打开 Powershell&#xff0c;输入如下命令 &#xff08;Set-Location 到你想放置 WSL2 的磁盘&#xff09; # Substitute the drive on which you # want WSL …

linux下搭建boost、muduo、mysql、nginx

参考博客&#xff1a; 1.boost&#xff1a;C网络编程 - Boost::asio异步网络编程 - 01- boost库源码编译安装 2.muduo&#xff1a;C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装 3.mysql&#xff1a; sudo apt-get install mysql-server sudo apt-get inst…

Vue(学习笔记)

什么是Vue Vue是一套构建用户界面的渐进式框架 构建用户界面&#xff1a; 基于数据渲染出用户可以看到的界面 渐进式&#xff1a; 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vue中的所有API都学完才能开发Vue&#xff0c;可以学一点开发一点 创建Vue实例 比如就上面…

猫头虎分享已解决Bug || ImportError: Keras requires TensorFlow 2.2 or higher

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

C++函数对象-运算符函数对象 - 旧式绑定器与适配器 - 从成员函数指针创建包装器,能以一个对象引用调用 (std::mem_fun_ref)

任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象&#xff0c;同时也提供了许多内置的函数对象。 旧式绑定器与适配器 早期提供功能支持的几个工具在 C11 中弃用&#xff0c;并于 C17 中移除&#xff08;旧否定器于 C17 中弃用并于 C20 中移除&#…

Devc++ 开发的 Easyx 瓦片地图编辑器之自定义贴图导入模块

接上次开发 Editing While Playing 使用 Easyx 开发的 RPG 地图编辑器 tilemap eaitor-CSDN博客 由于还不能导入自己绘制的贴图&#xff0c;所以还要增加自定义贴图的导入导出模块 这里就单独搓了一个自定义导入导出部分&#xff0c;之后再缝合进瓦片地图编辑器里 #include &…

openai sora 只能根据文本生成视频?不,TA 是通用物理世界模拟器

视频生成模型作为世界模拟器 我们探索了在视频数据上进行大规模生成模型的训练。 具体来说&#xff0c;我们联合在可变持续时间、分辨率和长宽比的视频和图像上训练文本条件扩散模型。 我们利用了一个在视频和图像潜在编码的时空补丁上操作的变压器架构。 我们最大的模型So…

C++的string容器->基本概念、构造函数、赋值操作、字符串拼接、查找和替换、字符串比较、字符存取、插入和删除、子串

#include<iostream> using namespace std; #include <string> //string的构造函数 /* -string(); //创建一个空的字符串 例如: string str; -string(const char* s); //使用字符串s初始化 -string(const string& str); //使…

Leetcode 209.长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&…

MYSQL--触发器

一:介绍: 1.触发器实际上就是一种特殊的存储过程,两者都能够在MYSQL当中完成特定的功能,存储在服务器上的特殊SQL片段,可以重复进行使用,提高复用性的一种功能.但是触发器并不需要进行调用,在使用DML操作的时候会自动的调用相关的触发器操作 2.触发器能够对于DML操作当中的,删除…

Linux基础命令-文件管理

目录结构 1.存放命令相关的目录 /bin #普通用户使用的命令 /bin/ls, /bin/date /sbin #管理员使用的命令 /sbin/service2.存放用户相关数据的家目录 /home #普通用户的家目录, 默认为/home/username /root #超级管理员root的家目录, 普通用户无权操作3.系统文件目录 /usr #相当…

《TCP/IP详解 卷一》第3章 链路层

目录 3.1 引言 3.2 以太网 3.3 全双工 省点 自动协商 流量控制 3.4 网桥和交换机 3.5 WiFi 3.6 PPP协议 3.6.1 PPP协议流程 3.7 环回 3.8 MTU和路径MTU 3.9 隧道基础 3.9.1 GRE 3.9.2 PPTP 3.9.3 L2TP 3.10 与链路层相关的攻击 3.11 总结 3.1 引言 城域网&…

132 Linux 系统编程9 ,IO操作,lseek 函数,truncate函数,查看文件的表示形式

一 lseek 函数 函数说明&#xff1a;此函数用于文件偏移 Linux中可使用系统函数lseek来修改文件偏移量(读写位置) 每个打开的文件都记录着当前读写位置&#xff0c;打开文件时读写位置是0&#xff0c;表示文件开头&#xff0c;通常读写多少个字节就会将读写位置往后移多少个字…

Spring Boot到底是如何进行自动配置的?

Spring Boot的自动配置主要通过以下几个步骤实现&#xff1a; 在SpringBoot启动的时候&#xff0c;加载主配置类&#xff0c;这个配置类通常带有SpringBootApplication注解。SpringBootApplication是一个复合注解&#xff0c;它包括了Configuration&#xff0c;EnableAutoConf…