CTF-RE 从0到N: TEA
TEA
TEA(Tiny Encryption Algorithm,轻量加密算法) 是一种简单、快速的对称加密算法。它是一个分组加密算法,通常用于加密 64 位的数据块,并使用 128 位的密钥。TEA 是一种“费斯妥结构”(Feistel structure)算法,具有 64 轮的加密过程,设计目标是简洁和高效。
TEA 加密算法原理
- 分组加密:TEA 将明文分成 64 位(8 字节)块,每个块分为两个 32 位部分(
v0和v1)。 - 密钥结构:TEA 使用 128 位密钥,分成 4 个 32 位的部分(
k[0],k[1],k[2],k[3])。 - 加密轮数:TEA 通常运行 64 轮的加密(或者在某些实现中,使用 32 轮)。
- 加密过程:通过对两个 32 位部分(
v0和v1)的混合和异或操作来增加密文的复杂性。
TEA 通过多轮迭代,利用简单的移位、加法和异或运算来实现数据加密。
标准 TEA 加密的 C 代码
以下是 TEA 的标准加密实现,使用 C 语言编写:
// TEA 加密函数
void tea_encrypt(uint32_t v[2], const uint32_t k[4]) {// 初始化v0和v1为输入数据的两个32位块uint32_t v0 = v[0], v1 = v[1], sum = 0;// 常量delta,用于累加器的固定值uint32_t delta = 0x9E3779B9;// 进行32轮加密操作for (uint32_t i = 0; i < 32; i++) {// 累加器,sum每轮累加delta值sum += delta;// 对v0进行加密操作,涉及左移、右移、XOR和密钥k[0]和k[1]v0 += ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);// 对v1进行加密操作,类似v0,涉及k[2]和k[3]v1 += ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);}// 将加密后的v0和v1保存回输入数组v[0] = v0;v[1] = v1;
}// TEA 解密函数
void tea_decrypt(uint32_t v[2], const uint32_t k[4]) {// 初始化v0和v1为输入数据的两个32位块uint32_t v0 = v[0], v1 = v[1];// 初始化累加器sum为最大值,用于解密过程uint32_t sum = 0xC6EF3720;// 常量delta,用于累加器的固定值uint32_t delta = 0x9E3779B9;// 进行32轮解密操作for (uint32_t i = 0; i < 32; i++) {// 对v1进行解密操作,与加密过程相反v1 -= ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);// 对v0进行解密操作,与加密过程相反v0 -= ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);// 累加器减少delta值sum -= delta;}// 将解密后的v0和v1保存回输入数组v[0] = v0;v[1] = v1;
}
代码解析
-
输入参数:
v是一个包含两个 32 位整数的数组,代表 64 位数据块的两个部分(v0和v1)。k是一个包含四个 32 位整数的数组,代表 128 位密钥的四个部分(k[0]到k[3])。
-
Delta 常量:
delta = 0x9E3779B9,它是黄金分割比的一个近似值,用于混合密钥和数据块。
-
加密过程:
- 初始时,
sum置为 0。sum是一个累加器,每轮加密时增加delta,以确保每轮混合不同的密钥部分。 - 每轮加密时,
v0和v1通过移位、加法和异或操作相互混合,并与密钥的不同部分组合。
- 初始时,
-
解密过程:
- 初始时,
sum被设定为 32 轮加密时的最终值(即0xC6EF3720)。 - 解密过程是加密过程的逆过程,逐步减去
delta,并通过相同的移位和异或操作还原原始的明文。
- 初始时,
特征
1. 双32位分组操作
TEA 处理的是 64 位数据块(分为两个 32 位整数 v0 和 v1)。因此在伪代码中,你可能会看到两个主要变量,通常是 32 位整数,分别对应于 TEA 加密中的 v0 和 v1。
伪代码中的特征可能类似如下:
v0 = data[0];
v1 = data[1];
2. 四个32位密钥
TEA 使用 128 位密钥,分成四个 32 位的部分 k[0], k[1], k[2], k[3]。如果在伪代码中看到四个整数数组元素反复用于加密过程,则很可能是 TEA 的密钥部分。
uint32_t k[4] = { key1, key2, key3, key4 };
3. 多轮循环(典型为32轮或64轮)
TEA 的加密过程通常有 32 或 64 轮,每轮使用固定的 delta 值累加到 sum 变量中,通常循环结构会类似于如下形式:
sum = 0;
for (i = 0; i < 32; i++) { // 32轮循环sum += delta;v0 += 复杂的表达式;v1 += 复杂的表达式;
}
其中 delta 是常量 0x9E3779B9,在伪代码中可以直接看到这个值:
delta = 0x9E3779B9;
4. 移位和异或操作
TEA 的核心是对 v0 和 v1 进行移位、加法和异或操作。通过反编译的伪代码中,应该可以看到 <<, >>, ^, + 等符号交替出现:
v0 += ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);
v1 += ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);
这里可以看出明显的移位和异或操作是 TEA 算法的一个标志性特征。
5. Delta 值和累加的 sum 变量
TEA 算法中使用的 delta 值为 0x9E3779B9,如果在伪代码中发现这个常量,并且被用来在每轮加密中累加到 sum 变量里,这也是 TEA 算法的一个强特征:
sum += delta;
解密过程的 sum 初始化为 0xC6EF3720(即 0x9E3779B9 * 32),然后在每轮中减少 delta 值,这也是解密过程的一个特征。
6. 相同的加密和解密逻辑
由于 TEA 是对称加密算法,解密过程和加密过程非常相似,只是 sum 的初始化和循环方向不同。如果在逆向过程中发现类似的加密和解密逻辑,特别是基于 sum 的加减操作,这通常是 TEA 解密的迹象。
xTEA
XTEA(Extended Tiny Encryption Algorithm)是 TEA 的改进版本,设计用于克服 TEA 的一些已知安全性问题。它保持了 TEA 的简单性和高效性,但引入了一些增强的特性以提高其安全性。XTEA 是一种基于分组加密的对称加密算法,使用 128 位密钥加密 64 位的数据块。它通过多轮加密将密钥与数据进行复杂混合,通常进行 64 轮操作。XTEA 的核心操作包括移位(<< 和 >>)、加法、异或和常数 delta 的使用。
XTEA 加密的主要特点
- 输入:64 位数据(通常拆分为两个 32 位块)和 128 位密钥(4 个 32 位整数)。
- 轮数:XTEA 进行 64 轮加密(比 TEA 的 32 轮更安全)。
- 核心操作:移位、加法、异或运算通过密钥和常数
delta的混合执行。 - delta 常量:XTEA 使用的
delta是一个固定常数,取值为0x9E3779B9(源于黄金分割数)。
XTEA 加密的 C 代码
XTEA 将 64 位的数据块分为两个 32 位部分 v0 和 v1,并依次使用 128 位密钥的四个部分 k[0], k[1], k[2], k[3]。加密过程如下:
// XTEA 加密函数
void xtea_encrypt(uint32_t v[2], const uint32_t k[4]) {// 初始化 v0 和 v1 为输入的两个 32 位数据块uint32_t v0 = v[0], v1 = v[1], sum = 0;// 常量 delta,用于控制加密过程中的变化uint32_t delta = 0x9E3779B9;// XTEA 的加密循环执行 32 轮for (uint32_t i = 0; i < 32; i++) {// 对 v0 进行加密操作,使用 v1 和密钥进行复杂变换// 这里使用左移、右移、XOR 运算,以及累加器 sum 和密钥 k 的部分值(k[sum & 3])v0 += ((v1 << 4) ^ (v1 >> 5)) + v1 ^ (sum + k[sum & 3]);// 累加器 sum 增加 delta 值,每轮都累加,确保变化sum += delta;// 对 v1 进行加密操作,使用 v0 和密钥进行变换// 同样使用左移、右移、XOR 运算,并使用 sum 的另一部分值 (k[(sum >> 11) & 3])v1 += ((v0 << 4) ^ (v0 >> 5)) + v0 ^ (sum + k[(sum >> 11) & 3]);}// 将加密后的结果保存回原始数组中v[0] = v0;v[1] = v1;
}// XTEA 解密函数
void xtea_decrypt(uint32_t v[2], const uint32_t k[4]) {// 初始化 v0 和 v1 为输入的两个 32 位数据块uint32_t v0 = v[0], v1 = v[1];// 初始化累加器 sum 为最大值,用于解密过程uint32_t sum = 0xC6EF3720;// 常量 delta,用于控制解密过程中的变化uint32_t delta = 0x9E3779B9;// XTEA 的解密循环执行 32 轮,与加密过程相反for (uint32_t i = 0; i < 32; i++) {// 对 v1 进行解密操作,使用与加密相反的公式v1 -= ((v0 << 4) ^ (v0 >> 5)) + v0 ^ (sum + k[(sum >> 11) & 3]);// 累加器 sum 减少 delta 值,与加密过程相反sum -= delta;// 对 v0 进行解密操作,使用与加密相反的公式v0 -= ((v1 << 4) ^ (v1 >> 5)) + v1 ^ (sum + k[sum & 3]);}// 将解密后的结果保存回原始数组中v[0] = v0;v[1] = v1;
}
解释
-
输入参数:
v[2]:是一个包含两个 32 位整数的数组,表示待加密的 64 位数据块。k[4]:是一个包含四个 32 位整数的数组,表示 128 位的密钥。
-
初始状态:
v0和v1分别代表 64 位数据块的前 32 位和后 32 位。sum是一个累加变量,初始化为 0。delta是一个固定的常数0x9E3779B9。
-
加密过程:
- XTEA 的加密循环执行 32 次,每次循环包括两轮加密操作。
- 在每轮中,
v0和v1被混合,通过移位、异或和加法操作与密钥部分结合。 sum在每轮中累加delta,并用作密钥索引。
-
轮次操作:
v0更新:使用v1的左移、右移与当前sum和密钥的异或操作进行更新。v1更新:使用v0的左移、右移与更新后的sum和密钥的异或操作进行更新。- 这种操作重复 32 次,相当于 64 轮加密。
-
最终结果:
- 加密完成后,
v0和v1的更新值存储回v[0]和v[1]中,得到加密后的数据。
- 加密完成后,
xxTEA
xxTEA 加密算法简介
XXTEA 是 TEA 和 XTEA 的改进版本,旨在解决 TEA 和 XTEA 中的弱点。XXTEA 是一种分组加密算法,但与 TEA 和 XTEA 不同的是,它能够加密长度为任意多个字节的数据,而不仅仅是固定长度的数据块。
XXTEA 通过将数据分割成多个 32 位的块,然后对这些块进行多轮的混淆和加密。它的核心思路是采用了一种特殊的非线性变换,防止简单的模式出现。
xxTEA 加密的 C 代码
// 定义常量 DELTA,用于加密和解密操作中的累加器增量
#define DELTA 0x9E3779B9// XXTEA 加密函数
void xxtea_encrypt(uint32_t *v, int n, const uint32_t k[4]) {// 如果数组大小 n 小于 2,不进行加密,直接返回if (n < 2) return;// 初始化 z 和 y,z 为数组最后一个元素,y 为第一个元素uint32_t z = v[n - 1], y = v[0], sum = 0;// 计算加密轮数,XXTEA 的轮数依赖于数据块的个数 nuint32_t rounds = 6 + 52 / n;// 外层循环执行轮数次for (uint32_t i = 0; i < rounds; i++) {// 累加器 sum 增加 DELTA,每轮都递增sum += DELTA;// 计算 e,用于密钥选择uint32_t e = (sum >> 2) & 3;// 内层循环处理 n-1 个数据块for (uint32_t p = 0; p < n - 1; p++) {y = v[p + 1]; // 下一个块的值// 更新当前块的值,使用 z 和 y 进行加密操作,结合移位、异或和密钥v[p] += ((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4)) ^ (sum ^ y) + (k[(p & 3) ^ e] ^ z);z = v[p]; // 更新 z 为当前块}// 最后一个数据块的加密操作y = v[0]; // 第一个块的值v[n - 1] += ((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4)) ^ (sum ^ y) + (k[((n - 1) & 3) ^ e] ^ z);z = v[n - 1]; // 更新 z 为最后一个块}
}// XXTEA 解密函数
void xxtea_decrypt(uint32_t *v, int n, const uint32_t k[4]) {// 如果数组大小 n 小于 2,不进行解密,直接返回if (n < 2) return;// 初始化 z 和 y,z 为数组最后一个元素,y 为第一个元素uint32_t z = v[n - 1], y = v[0];// 初始化累加器 sum,为加密的总和,解密时从最大值开始递减uint32_t sum = DELTA * (6 + 52 / n);// 外层循环执行轮数次,与加密时的轮数相同for (uint32_t i = 0; i < 6 + 52 / n; i++) {// 计算 e,用于密钥选择uint32_t e = (sum >> 2) & 3;// 内层循环处理 n-1 个数据块,从数组末尾往前遍历for (uint32_t p = n - 1; p > 0; p--) {z = v[p - 1]; // 前一个块的值// 更新当前块的值,使用 z 和 y 进行解密操作,结合移位、异或和密钥v[p] -= ((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4)) ^ (sum ^ y) + (k[(p & 3) ^ e] ^ z);y = v[p]; // 更新 y 为当前块}// 第一个数据块的解密操作z = v[n - 1]; // 最后一个块的值v[0] -= ((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4)) ^ (sum ^ y) + (k[(0 & 3) ^ e] ^ z);y = v[0]; // 更新 y 为第一个块// 累加器 sum 减少 DELTA 值,与加密时相反sum -= DELTA;}
}
代码说明
-
函数参数:
v是要加密/解密的数据块,类型为uint32_t*,表示数据的多个 32 位块。n是数据块的个数,即数据中包含的 32 位块的数量。k[4]是 128 位的密钥,分成四个 32 位的无符号整数。
-
加密过程:
- XXTEA 会对长度为
n的v数组进行多轮加密,轮数由6 + 52 / n决定(这确保对不同长度的数据,轮数适当调整)。 - 在每一轮中,XXTEA 对每个数据块进行复杂的非线性混合,并结合密钥
k来加密。
- XXTEA 会对长度为
-
解密过程:
- 解密的过程和加密的过程基本对称。唯一不同的是解密时从最大
sum开始递减,并通过与加密时相反的操作还原数据。
- 解密的过程和加密的过程基本对称。唯一不同的是解密时从最大
特征总结
| 特征 | TEA | XTEA | XXTEA |
|---|---|---|---|
| 数据块大小 | 固定 64 位(2 x 32 位) | 固定 64 位(2 x 32 位) | 任意长度的数据块(n 个 32 位块) |
| 轮数 | 固定 32 轮 | 固定 32 轮(每轮两步,64 步) | 动态轮数(6 + 52 / n) |
| 变换复杂度 | 简单的移位和 XOR 操作 | 相对复杂的 XOR 和 sum 操作 | 更复杂的移位、XOR、索引操作 |
| 累加器 | 固定累加 sum 和 delta | sum 逐步增加,两次累加 | 动态累加 sum,并引入动态索引 e |
| 加密逻辑 | 操作两个 32 位块 | 双重变换操作(左右两次) | 动态遍历每个数据块进行加密 |
练习!
BUUCTF在线评测
相关文章:
CTF-RE 从0到N: TEA
TEA TEA(Tiny Encryption Algorithm,轻量加密算法) 是一种简单、快速的对称加密算法。它是一个分组加密算法,通常用于加密 64 位的数据块,并使用 128 位的密钥。TEA 是一种“费斯妥结构”(Feistel structu…...
python 使用PIL获取图片长宽
在Python中,你可以使用Pillow库(PIL的一个分支和替代品)来获取图片的长和宽。Pillow提供了丰富的图像处理功能,包括获取图像的基本属性,如尺寸。 以下是一个简单的示例,展示了如何使用Pillow库来获取图片的…...
【Nas】X-DOC:搞机之PVE部署All In One(黑群晖NAS 软路由OpenWrt Docker Win10远程桌面)
【Nas】X-DOC:搞机之PVE部署All In One(黑群晖NAS & 软路由OpenWrt & Docker & Win10远程桌面) 1、原硬件配置清单:2、改AIO后增加配置清单:3、虚拟化平台PVE:4、搭建的关键服务: 1…...
linux 驱动源码分析的理解。
首先 , 是linux 驱动,我看网上的老师,在分析源码时 , 不会 所有的函数都分析,而是分析一些比较重要的函数,一些厉害的人,在分析源码时…...
鸿蒙-任务栏右击退出 或 UIAbility窗口关闭,怎么弹框拦截
onPrepareToTerminate 需要配置权限 ohos.permission.PREPARE_APP_TERMINATE 参考链接:文档中心import { emitter } from kit.BasicServicesKit; import { common } from kit.AbilityKit; import { TipsDialog } from kit.ArkUI;// entryAbility.ets 在你的uiabilit…...
【C++进阶篇】——STL的简介
【C进阶篇】——STL的简介 1.什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在…...
信息安全工程师(70)网络攻击陷阱技术与应用
前言 网络攻击陷阱技术是一种主动的防御方法,作为网络安全的重要策略和技术手段,有利于网络安全管理者获得信息优势。 一、网络攻击陷阱技术原理 网络攻击陷阱技术可以消耗攻击者所拥有的资源,加重攻击者的工作量,迷惑攻击者&…...
Web保存状态的手段(Session的使用)
一,JSP中的page指令 1. <% page language“java” session“true”%> session:此页面是否使用session,默认值为true 二,使用Session完善之前的登录程序 1. 如何禁止直接输入URL地址进入登录功能的欢迎界面? …...
第五十四章 安全元素的详细信息 - DerivedKeyToken 详情
文章目录 第五十四章 安全元素的详细信息 - <DerivedKeyToken> 详情详情消息中的位置 第五十四章 安全元素的详细信息 - 详情 <DerivedKeyToken> 的目的是携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的相关…...
kafka 的高可用机制是什么?
大家好,我是锋哥。今天分享关于【kafka 的高可用机制是什么?】面试题?希望对大家有帮助; kafka 的高可用机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个分布式消息系统&am…...
4.1.3 网站通信技术
文章目录 1. 网站通信方式2. URL - 统一资源定位符定义格式演示 3. 发送请求的4种形式在地址栏中输入URL访问超链接href属性指定URLform表单在action中指定URL通过AJAX请求后端数据 4. 两种不同返回的请求发送URL,后端处理完响应页面发送AJAX请求,后端处…...
Java-图书管理系统
我的个人主页 欢迎来到我的Java图书管理系统,接下来让我们一同探索如何书写图书管理系统吧! 1管理端和用户端 2建立相关的三个包(book、operation、user) 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…...
python如何通过json以及pickle读写保存数据
记录信息 比如说我写了这样一段程序,记录了爱吃的食物: food_list []while True:c input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c "1":new_food input("输入你…...
【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
2024年人机交互与虚拟现实国际会议(HCIVR 2024) 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网:www.hcivr.org 2024 International Conference on Human-Computer Interaction and …...
Linux vim编辑器
前言: 首先我们来了解一下什么是编辑器,通常我们在widow系统下例如C/C我们进行写代码时,我们通过vs2022等等编译器进行,这里的编译器是一种IDE(集成开发环境),集成开发环境是将代码编辑器、编译…...
普推知产:申请商标名称从4字改成3字下了初审!
近日7月的时候普推知产老杨帮客户申请的水果猕猴桃31类商标,初步审定公告下来了,基本没什么问题三个月公告结束后一个月内就可以拿到商标注册证,客户所在地全国有名猕猴桃之县,同质化竞争还得需要商标才可以。 刚开始了解到这位做…...
Flink 状态精准一次性特性
Flink 的一个重大价值在于, 它既保证了 exactly-once ,也具有低延迟和高吞吐 的处理能力 。 1.端到端(End-To-End)状态一致性 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一…...
算法笔记day08
1.游游的水果大礼包 这道题很容易让人想到贪心,但是其实是一道枚举题,只需举一个反例,贪心无非就是哪个礼包价值大,就优先组成哪个礼包。 算法思路: 设可以组成x个a礼包,y个b礼包,求ax by的最…...
在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)
在Selenium中,driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素,你可以对这个元素执行多种操作。此外,driver.find_element() 只是定位元素的方法之一,它还有其他一些相关的方法和属性,但…...
sqli-labs靶场安装以及刷题记录-docker
sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
