攻防世界GFSJ1229 Three
题目编号:GFSJ1229

解题过程
1. 附件下载是三个压缩包A.zip B.zip C.zip和一个python程序Three.py

2. A.zip可以直接解压出来,内容如下:
```
'2022-08-27 20:16:04.246131' Func A0*X0+B0
'2022-08-27 20:16:05.116859' Read_Data A0.txt->A0(28829613228241459)
'2022-08-27 20:16:06.097964' Secret_Share A0
'2022-08-27 20:16:07.022455' Get A00(200254991086689) A01(200241552690281)
'2022-08-27 20:16:07.925862' Get X00(200058430391504) X01(200401773940794)
'2022-08-27 20:16:09.077771' Mul_loc_compute A0,X0->C00
'2022-08-27 20:16:10.764928' RGet C02(924422050091355025836012334663090)
'2022-08-27 20:16:11.213530' ReShare C00(random mask is 507412160912)
'2022-08-27 20:16:12.153062' Get B00(199957680670222) B01(200362172648094)
'2022-08-27 20:16:13.100727' Add_loc_compute C00,B00->Y00
'2022-08-27 20:16:13.281906' ReShare Y00(random mask is -1008362525723)
'2022-08-27 20:16:14.017485' RGet Y02(924422050091362838179268571917871)
'2022-08-27 20:16:17.000001' Open Y00
'2022-08-27 20:16:17.000101' RGet Y01(12163251699969281466186532960410)
'2022-08-27 20:16:17.000299' Cyberloafing!!
'2022-08-27 20:16:17.004194' ReBuild Y0
'2022-08-27 20:16:17.013270' Save_Data
```
3. B.zip 和C.zip有密码,查看Three.py,代码加了注释后如下:
```Python
import datetime
import numpy as np
# 协议类,用于处理多方参与的加密计算
class Protocol:
def __init__(self, party_num):
# 初始化协议类,指定当前参与方编号 (party_num: 0, 1, 或 2)
self.pn = party_num # 参与方编号 (party_num: 0, 1, 2)
def Read_Data(self, path):
# 读取数据文件中的内容,尝试将其转换为数值(整数或浮点数)
data = open(path).readline().strip() # 从文件中读取一行数据并去除首尾空格
try:
if '.' in data:
data = float(data) # 如果数据包含小数点,则转换为浮点数
else:
data = int(data) # 否则,转换为整数
except:
# 如果转换失败,打印错误信息并退出程序
print('No number')
exit(-1)
return data # 返回读取的数据
def Get(self, x1, x2):
# 获取两个秘密共享的值 (函数未实现)
pass
def RGet(self, x1):
# 获取一个秘密共享的值 (函数未实现)
pass
def ReShare(self, x):
# 重新共享值 x,x = x + ri,其中 r0 + r1 + r2 = 0
# ri (i=0,1,2) 是随机整数,然后将 x 发送给 (self.pn + 1) % 3 的参与方
pass
def Secret_Share(self, x):
# 秘密共享函数,将 x 拆分为三个秘密共享的值
# x1 和 x2 是随机整数,x3 = x - x1 - x2
# sharelist 存储了三部分的秘密共享值,loc 确定了当前参与方的位置
# reserved 保存了两个与当前参与方相关的共享值,用于后续计算
x1, x2 = np.random.randint(0, 100), np.random.randint(0, 100) # 随机生成 x1 和 x2
x3 = x - x1 - x2 # 计算 x3,使 x1 + x2 + x3 = x
sharelist = [x1, x2, x3] # 将 x 分成三个部分
loc = self.pn # 当前参与方的位置
self.reserved = (sharelist[loc], sharelist[(loc + 1) % 3]) # 保留两个共享值
return (sharelist[0], sharelist[1]), (sharelist[1], sharelist[2]), (sharelist[2], sharelist[0])
def Mul_loc_compute(self, x1, y1, x2, y2):
# 局部乘法计算,使用秘密共享的 x1 和 y1 计算乘积
# 计算过程为 x1*y1 + x1*y2 + x2*y1,并将结果存储在 self.mulx
self.mulx = x1 * y1 + x1 * y2 + x2 * y1
def Add_loc_compute(self, x1, y1):
# 局部加法计算,计算两个共享值的和并存储在 self.addx
self.addx = x1 + y1
def Cyberslacking(self):
# 打印表示 "消极工作" 的消息 (仅作示例用途)
print('Cyberloafing!!')
print('Cyberloafing!!')
print('Cyberloafing!!')
def Save_Data(self):
# 保存数据的默认方法 (可选)
# 使用当前时间生成密码 (pwd),压缩所有数据后重建函数的答案 (未实现)
pwd = str(datetime.datetime.now())
pass
def Func(self, expression):
# 打印数学表达式,将会计算表达式,但保证隐私不泄露
print('Math expression', expression, 'will be computed! You can get the answer without leak your privacy!')
def ReBuild(self, x1, x2, x3):
# 重建函数的答案,利用秘密共享的值 x1, x2, x3 求和得到原始数据
return x1 + x2 + x3
# 示例:A0 表示 'flag{xxxxxxxxxxx',X0 表示 xxxxx...xxx,B0 表示 xxxxxxxxx}
# A (参与方 0) 拥有 A0,B (参与方 1) 拥有 X0,C (参与方 2) 拥有 B0
# 函数表示 A0 * X0 + B0
p0 = Protocol(0)
p1 = Protocol(1)
p2 = Protocol(2)
```
是C的算法,其中pwd = str(datetime.datetime.now())暴露了如何计算密码的,密码格式为当前时间精确到微秒,如'YYYY-MM-DD HH:MM:SS.ssssss'。
4. 破解C.zip的密码:
```python
## Three.py是C的算法
import zipfile # 导入 zipfile 库,用于处理 ZIP 文件
def extract(file, password):
"""
解压指定的 ZIP 文件到当前目录,使用给定的密码解压缩。
参数:
- file: 要解压缩的 zipfile.ZipFile 对象
- password: 解压密码,以字符串列表的形式提供
"""
file.extractall(path='.', pwd=''.join(password).encode('utf-8')) # 将密码拼接为字符串并编码为 UTF-8 格式
# 初始化空的密码列表,将用于存储所有可能的密码组合
password_lst = []
# 设置密码前缀,假设所有密码以同一时间戳前缀开头
prestr = '2022-08-27 20:16:17.'#从A.txt中找到getData的起始时间
# 构造 6 位数的密码组合并添加到 password_lst 列表中
for i in range(0, 999999): # 生成从 000000 到 999999 的所有可能组合
s = str(i) # 将数字转换为字符串
tmpnum = '0' * (6 - len(s)) + s # 前面补足 0 使其成为 6 位数
password_lst.append(prestr + tmpnum) # 将时间戳前缀和 6 位数字组合并添加到密码列表
# 打开指定路径的 ZIP 文件,并设为读模式
zfile = zipfile.ZipFile("C.zip", 'r')
# 遍历所有可能的密码,尝试解压 ZIP 文件
for pwd in password_lst:
try:
extract(zfile, pwd) # 尝试使用当前密码解压缩
print(pwd) # 如果解压成功,打印正确的密码
break # 成功后退出循环
except:
continue # 如果解压失败(密码错误),继续尝试下一个密码
##print: 2022-08-27 20:16:17.930813
```
5. 使用上面获得的密码解压C.zip, 获得C.txt内容如下:
```
'2022-08-27 20:16:04.911132' Func A0*X0+B0
'2022-08-27 20:16:07.201341' Get A02 A00
'2022-08-27 20:16:07.800077' Get X02 X00
'2022-08-27 20:16:08.303948' Mul_loc_compute A0,X0->C02
'2022-08-27 20:16:10.662982' ReShare C02
'2022-08-27 20:16:10.872634' RGet C01
'2022-08-27 20:16:11.412399' Read_Data B0.txt->B0
'2022-08-27 20:16:11.729341' Secret_Share B0
'2022-08-27 20:16:11.800012' Get B02 B00
'2022-08-27 20:16:12.214092' Add_loc_compute C02,B02->Y02
'2022-08-27 20:16:13.334908' ReShare Y02(random mask is 507036073644)
'2022-08-27 20:16:13.923122' RGet Y01
'2022-08-27 20:16:15.000382' Open Y02
'2022-08-27 20:16:17.000892' RGet Y00
'2022-08-27 20:16:17.009702' Cyberloafing!!
'2022-08-27 20:16:17.019991' ReBuild Y0
'2022-08-27 20:16:17.930813' Save_Data
```
6. A.txt和C.txt提供了A0、A1以及加密分享和掩码,以及过程中的Y0和X0相关值,可以逆向计算,因为总的计算公式是A0*X0+B0=Y0,可以求出B0,计算程序如下:
```python
from Crypto.Util.number import long_to_bytes
# 定义局部乘法计算函数
# 通过已知的秘密共享值 A00、A01、X00 和 X01,计算出 C00 的真实值
# 此函数在秘密共享中用于计算多方参与的局部乘法
def Mul_loc_compute(x1, y1, x2, y2):
return x1 * y1 + x1 * y2 + x2 * y1
# 已知的 A0 值和各秘密共享的具体值,根据日志记录得出以下共享值:
# A0:是目标值,日志显示为 28829613228241459。
# A00_true 和 A01_true 是 A0 的两个共享值,来自 A 方日志的 'Get A00' 和 'Get A01'。
# X00_true 和 X01_true 是 X0 的两个共享值,来自 A 方日志的 'Get X00' 和 'Get X01'。
A0 = 28829613228241459
A00_true = 200254991086689
A01_true = 200241552690281
X00_true = 200058430391504
X01_true = 200401773940794
B00_true = 199957680670222
# 计算 C00 的真实值
# 使用 Mul_loc_compute 函数来计算局部乘法结果 C00_true,以便后续计算。
# 通过 A00_true 和 X00_true, A01_true 和 X01_true 的共享值计算得出。
C00_true = Mul_loc_compute(A00_true, X00_true, A01_true, X01_true)
# 根据日志,C00 经过了掩码操作,掩码值为 507412160912,来源于 A 方日志的 'ReShare C00'。
# 计算带掩码的 C00 值(C00_mask),供后续 Y00 的计算使用。
C00_mask = C00_true + 507412160912
# 计算 Y00_true
# 根据 A 方日志的 'Add_loc_compute C00,B00->Y00' 可知 Y00 是 C00 和 B00 的局部相加结果
# 因此,Y00_true = C00_mask + B00_true。
Y00_true = C00_mask + B00_true
# A 方日志的 'ReShare Y00' 显示 Y00 被应用了掩码 -1008362525723
# 计算出 Y00 的带掩码值 Y00_mask,以供最终计算使用。
Y00_mask = Y00_true + (-1008362525723)
# 读取 C 方日志获取 Y02 的带掩码值 924422050091362838179268571917871 和掩码 507036073644
# Y02_mask 和 Y02_true 分别表示 Y02 的带掩码值和真实值
Y02_mask = 924422050091362838179268571917871
Y02_true = Y02_mask - 507036073644
# C 方日志显示 Y01_mask 值为 12163251699969281466186532960410,将其直接使用
Y01_mask = 12163251699969281466186532960410
# A 方日志显示 C02_mask 的值为 924422050091355025836012334663090
# 使用 Y02_true 和 C02_mask 计算 B02_true,这是 B0 的一部分。
C02_mask = 924422050091355025836012334663090
B02_true = Y02_true - C02_mask
# 根据 A 和 C 日志中 B 的各共享值 (B00_true, B01_true) 以及计算出的 B02_true
# 还原 B0 值,这是最终的关键结果之一。
B01_true = 200362172648094
B0 = B00_true + B01_true + B02_true
# 计算 Y0 的总和,用于还原 X0 值
# 使用 Y00_mask、Y01_mask 和 Y02_mask,通过累加得到 Y0 的值
Y0 = Y00_mask + Y01_mask + Y02_mask
# 计算 X0 值
# 根据公式 X0 = (Y0 - B0) // A0 计算得出 X0,这是最终需要的另一个关键结果
X0 = (Y0 - B0) // A0
# 将 A0、X0 和 B0 转换为 ASCII,并组合成 flag,代表最终解密的结果。
flag = long_to_bytes(A0) + long_to_bytes(X0) + long_to_bytes(B0)
print(flag)# b'flag{23snyau_sllpmxcz}'
```
7. 备注解释下多方加密(by AI)
在这个三方安全计算协议中,`A00`、`B00`、`C00`、`X00` 等变量是每个参与方持有的秘密共享值的部分。这些共享值通过分割和掩码等方式隐藏了原始数据,在不泄露完整信息的情况下进行计算。
### 各变量的含义
- **A0、B0、X0**:这些是原始值,代表 Allen、Bob 和其他参与方各自拥有的秘密数据。例如:
- `A0`:由 Allen 持有的原始值。
- `X0`:是 Allen 和其他参与方希望参与计算的一个值。
- `B0`:由 Bob 持有的原始值。
- **A00、B00、C00、X00**:这些是 `A0`、`B0`、`C0`、`X0` 的分片,每个原始值被分割为多份秘密共享的片段,各参与方只持有其中一部分。
- **A00**:`A0` 的分片,由参与方之一持有。
- **B00**:`B0` 的分片,由参与方之一持有。
- **C00**:`C0` 的分片,这是计算过程中生成的中间结果。
- **X00**:`X0` 的分片。
这些分片和共享值的划分是为了让多个参与方共同进行计算,同时保护隐私,使得单个参与方无法独立得出完整的原始数据。
### 计算流程概述
在一次多方计算中,每个参与方通过持有的共享值分片参与运算,具体的流程如下:
1. **秘密共享(Secret Sharing)**:
- 将每个参与方的原始值(如 `A0`、`B0`、`X0`)分成多个共享片段,如 `A00`、`A01`、`A02` 等。
- 这些共享片段被分配给不同的参与方。例如,Allen 可能持有 `A00`,Bob 持有 `A01`,Crosley 持有 `A02`。这样,任何单独一个片段都无法还原 `A0` 的完整值。
2. **局部计算(Local Computation)**:
- 每个参与方在自己持有的分片上执行局部计算。例如:
- Allen 计算 `A00 * X00`,Bob 计算 `A01 * X01`,Crosley 计算 `A02 * X02`。
- 这些局部计算结果形成了 `C00`、`C01`、`C02` 等中间共享值。
3. **重新共享和掩码处理(ReShare and Masking)**:
- 为了防止泄露中间结果,每个参与方会给自己的计算结果加上随机掩码。例如,Allen 的局部计算结果 `C00` 会加上一个掩码 `C00_mask`。
- 然后,带掩码的结果 `C00_mask` 会被共享给其他参与方,以供后续的合并计算。
4. **合并局部结果(Combine Local Results)**:
- 所有局部计算的结果(如 `C00_mask`, `C01_mask`, `C02_mask`)在各参与方间汇总,通过计算得到最终结果的共享值。
- 合并结果的过程确保了各参与方能共同计算出所需的结果(例如 `A0 * X0 + B0`),而每个参与方都不会泄露自己的原始数据。
5. **最终重建(ReBuild)**:
- 当所有计算完成后,所有共享值可以重构为最终结果。各方将合并后的共享值返回给 Allen,Allen 可以使用这些值恢复出最终的结果。
### 例子:如何运作
假设 Allen 希望计算 `A0 * X0 + B0`,整个过程可以总结如下:
1. **秘密共享阶段**:`A0`、`X0` 和 `B0` 被分割成 `A00, A01, A02`,`X00, X01, X02`,`B00, B01, B02` 三个部分,每个参与方持有一部分。
2. **局部计算**:每个参与方计算 `A00 * X00`、`A01 * X01`、`A02 * X02`。
3. **掩码和重新共享**:每个局部结果加上随机掩码,形成 `C00_mask`、`C01_mask`、`C02_mask`,防止泄露中间数据。
4. **加法和最终重建**:各方汇总带掩码的局部结果,并执行加法操作得到加法结果 `Y0`。最终 `Y0` 被重构并解码,恢复出最终的计算结果。
通过这种流程,所有参与方可以在保护数据隐私的同时共同完成 `A0 * X0 + B0` 的计算。
相关文章:
攻防世界GFSJ1229 Three
题目编号:GFSJ1229 解题过程 1. 附件下载是三个压缩包A.zip B.zip C.zip和一个python程序Three.py 2. A.zip可以直接解压出来,内容如下: 2022-08-27 20:16:04.246131 Func A0*X0B0 2022-08-27 20:16:05.116859 Read_Data A0.txt->A0(28829613228…...
2023 icpc杭州(M,J,D,G,H)
文章目录 [M. V-Diagram](https://codeforces.com/gym/104976/problem/M)[J. Mysterious Tree](https://codeforces.com/gym/104976/problem/J)[D.Operator Precedence](https://codeforces.com/gym/104976/problem/D)[G. Snake Move](https://codeforces.com/gym/104976/probl…...
在CentOS 7上安装Alist
在CentOS 7上安装Alist 的步骤如下: 1. 卸载旧版本 如果你之前安装过旧版本的Docker,可以先卸载它: sudo yum remove docker docker-common docker-snapshot docker-engine2. 安装依赖包 确保你的系统是最新的,并安装必要的依…...
【C/C++】memcpy函数的模拟实现
零.导言 上一篇博客我们学习了memcpy函数,不妨我们现在尝试模拟实现memcpy函数的功能。 一.实现memcpy函数的要点 memcpy函数是一种C语言内存函数,可以按字节拷贝任意类型的数组,因此我们自定义的模拟函数需要两个无类型的指针参数ÿ…...
嵌入式开发之线程互斥
目录 互斥锁初始化-pthread_mutex_init 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 同步 VS 互斥 临界资源:一次只允许一个任务(进程、线程)访问的共享资源,不允许多个任务同时访问的。 临界区:访问临界区的代码 互斥机制:mutex互斥锁,任务访问临界资…...
JavaScript 变量作用域与函数调用机制:var 示例详解
JavaScript 变量作用域与函数调用机制:var 示例详解 在 JavaScript 中,作用域和闭包是理解变量生命周期和行为的核心概念。通过以下这段代码,我们将详细分析如何在不同的作用域内使用 var 关键字,并解释相关的变量访问规则 代码解…...
Linux(CentOS)安装 JDK
1、下载 JDK 官网:https://www.oracle.com/ 2、上传 JDK 文件到 CentOS,使用FinalShell远程登录工具,并且使用 root 用户登录 3、解压 JDK 创建目录 /export/server mkdir -p /export/server 解压到目录 /export/server tar -zxvf jdk-17…...
AI产品经理实战手册:策略、开发与商业化指南
通过《AI产品经理手册》,将可以了解不同类型的AI,如何将AI整合到产品或业务中,以及支持创建AI产品或将AI集成到现有产品所需的基础设施。熟悉实践管理AI产品开发流程、评估和优化AI模型,以及应对与AI产品相关的复杂伦理和法律问题…...
【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用
【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用 目录 文章目录 【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用目录摘要研究背景问题与挑战如何解决创新点算法模型1. 知识总结模块(Knowledge Summarization Module&…...
Linux之初体验
目录 第1关:1-Linux初体验 第2关:1-Linux常用命令 第3关:1-Linux 查询命令帮助语句 第4关:2--查询命令-locate 第5关:2--查询命令-which/whereis 第6关:2--查询命令-find 第7关:3-Linux文…...
现代化水电管理:Spring Boot在大学城的实践
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
黑马官网2024最新前端就业课V8.5笔记---HTML篇
Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现,中间包裹内容<>里面放英文字母(标签名)结束标签比开始标签多 /拓展 : 双标签:成对出现的标签 单标签:只有开…...
GS-Blur数据集:首个基于3D场景合成的156,209对多样化真实感模糊图像数据集。
2024-10-31,由韩国首尔国立大学的研究团队创建的GS-Blur数据集,通过3D场景重建和相机视角移动合成了多样化的真实感模糊图像,为图像去模糊领域提供了一个大规模、高覆盖度的新工具,显著提升了去模糊算法在真实世界场景中的泛化能力…...
Linux下Java的多种方式安装
Linux下Java的多种方式安装 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言,不仅吸收了…...
Android Studio:connect time out
参考:Android Studio:connect time out_android studio connection timed out-CSDN博客...
A014-基于Spring Boot的家电销售展示平台设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
数学期望和联合概率密度
数学期望的定义 数学期望是描述随机变量平均趋势的一个重要统计量。根据随机变量的类型(离散或连续),数学期望的定义有所不同。 离散型随机变量的数学期望: 若离散型随机变量 X X X取值为 x 1 , x 2 , … , x n , … x_1,x_2,\do…...
萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?
现代农业的迅速发展中,集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR,作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案,为农业监控系统的建设提供了坚实的技…...
【MongoDB】Windows/Docker 下载安装,MongoDB Compass的基本使用、NoSQL、MongoDB的基础概念及基础用法(超详细)
文章目录 Windows下载MongoDB Compass使用NoSQL的基本概念MongoDB常用术语MongoDB与RDBMS区别MongoDB的CRUD 更多相关内容可查看 Docker安装MongoDB可查看:Docker-安装MongoDB Windows下载 官网下载地址:https://www.mongodb.com/try/download/communi…...
微信小程序-自定义导航栏
一.自定义导航栏 1.JSON文件中配置"navigationStyle": “custom” "navigationStyle": "custom"2.给导航栏设置轮播图 <swiper class"custom-swiper" indicator-dots autoplay interval"2000"> <swiper-item>…...
3步解决macOS应用更新烦恼:开源神器Latest使用指南
3步解决macOS应用更新烦恼:开源神器Latest使用指南 【免费下载链接】Latest A small utility app for macOS that makes sure you know about all the latest updates to the apps you use. 项目地址: https://gitcode.com/gh_mirrors/la/Latest 你是否曾为m…...
3步掌握VectorBT:Python量化交易框架的终极指南
3步掌握VectorBT:Python量化交易框架的终极指南 【免费下载链接】vectorbt Find your trading edge, using the fastest engine for backtesting, algorithmic trading, and research. 项目地址: https://gitcode.com/gh_mirrors/ve/vectorbt 在量化交易的世…...
Umi-OCR服务化集成解决方案:将离线OCR能力无缝嵌入你的技术栈
Umi-OCR服务化集成解决方案:将离线OCR能力无缝嵌入你的技术栈 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.c…...
保姆级教程:在Windows上用VSCode和nRF5340 Audio DK板跑通第一个蓝牙例程
从零开始:WindowsVSCode环境下的nRF5340 Audio DK蓝牙开发实战 在嵌入式开发领域,Nordic Semiconductor的nRF5340 Audio DK开发板因其强大的双核架构和出色的蓝牙音频性能而备受瞩目。但对于刚接触这款开发板的工程师来说,从环境配置到成功运…...
陶哲轩:AI让数学进入「工业化」时代,数学家也可以是「包工头」
来源:机器之心编辑:张倩、陈陈很多人提到数学研究,脑子里浮现的还是那个画面:一个人,一块白板,来回踱步,等灵感突然降临。但当今世界最伟大的数学家之一、菲尔兹奖得主陶哲轩却告诉我们…...
数字一阶低通滤波器在嵌入式系统中的应用:从理论到代码实现(附MATLAB验证)
数字一阶低通滤波器在嵌入式系统中的工程实践:从参数设计到代码优化 在嵌入式系统开发中,信号处理是一个永恒的话题。无论是传感器数据采集、电机控制还是通信系统,原始信号往往混杂着各种噪声。数字一阶低通滤波器以其计算量小、实现简单的特…...
3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案
3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...
AI 将编写 90% 的代码……我们现在到底该怎么办?
我至今仍清晰地记得读到那个标题的瞬间。那是 2026 年初一个平凡的夜晚,大约晚上 9 点,我正习惯性地在关闭笔记本电脑前翻阅科技新闻。突然,一行文字让我如坠冰窖,整个人僵在原地。“Anthropic 首席执行官预判:未来六个…...
Knowledge Repo转换器终极指南:10个技巧实现Jupyter、R Markdown等多格式完美转换
Knowledge Repo转换器终极指南:10个技巧实现Jupyter、R Markdown等多格式完美转换 【免费下载链接】knowledge-repo A next-generation curated knowledge sharing platform for data scientists and other technical professions. 项目地址: https://gitcode.com…...
RRFLibraries:Duet 3D打印机固件的硬实时C++驱动库
1. RRFLibraries 项目概述RRFLibraries 是 RepRapFirmware 生态系统中高度工程化的底层软件基础设施,其定位并非通用型嵌入式库,而是专为 3D 打印固件——特别是 Duet 系列控制器(Duet 2 WiFi、Duet 3 Mainboard、Duet 3 Mini)——…...
