当前位置: 首页 > news >正文

攻防世界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语言内存函数,可以按字节拷贝任意类型的数组,因此我们自定义的模拟函数需要两个无类型的指针参数&#xff…...

嵌入式开发之线程互斥

目录 互斥锁初始化-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。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…...

GS-Blur数据集:首个基于3D场景合成的156,209对多样化真实感模糊图像数据集。

2024-10-31&#xff0c;由韩国首尔国立大学的研究团队创建的GS-Blur数据集&#xff0c;通过3D场景重建和相机视角移动合成了多样化的真实感模糊图像&#xff0c;为图像去模糊领域提供了一个大规模、高覆盖度的新工具&#xff0c;显著提升了去模糊算法在真实世界场景中的泛化能力…...

Linux下Java的多种方式安装

Linux下Java的多种方式安装 博客&#xff1a; www.lstar.icu 开源地址 Gitee 地址&#xff1a; https://gitee.com/lxwise/iris-blog_parent Github 地址&#xff1a; https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言&#xff0c;不仅吸收了…...

Android Studio:connect time out

参考&#xff1a;Android Studio&#xff1a;connect time out_android studio connection timed out-CSDN博客...

A014-基于Spring Boot的家电销售展示平台设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…...

数学期望和联合概率密度

数学期望的定义 数学期望是描述随机变量平均趋势的一个重要统计量。根据随机变量的类型&#xff08;离散或连续&#xff09;&#xff0c;数学期望的定义有所不同。 离散型随机变量的数学期望&#xff1a; 若离散型随机变量 X X X取值为 x 1 , x 2 , … , x n , … x_1,x_2,\do…...

萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?

现代农业的迅速发展中&#xff0c;集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR&#xff0c;作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案&#xff0c;为农业监控系统的建设提供了坚实的技…...

【MongoDB】Windows/Docker 下载安装,MongoDB Compass的基本使用、NoSQL、MongoDB的基础概念及基础用法(超详细)

文章目录 Windows下载MongoDB Compass使用NoSQL的基本概念MongoDB常用术语MongoDB与RDBMS区别MongoDB的CRUD 更多相关内容可查看 Docker安装MongoDB可查看&#xff1a;Docker-安装MongoDB Windows下载 官网下载地址&#xff1a;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>…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...