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…...
谷歌仓库管理工具repo
Google 的仓库管理工具 Repo 是一个用于管理包含多个 Git 仓库的大型项目的命令行工具。它最初由 Google 为 Android 操作系统开发,以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释: 主要功能与特点 多仓库管理: Rep…...
C#的自定义Tip窗体 - 开源研究系列文章
上次编写了自定义的提示和对话框窗体,这次记录的是自定义的Tip窗体,用于显示提示操作。有时间没编程了,这次就当进行了记录。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 应用; 3、 运行界面&…...
目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件
目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…...
软考:CORBA架构
CORBA过时了吗 CORBA指南 个人小结: IPC,进程间通信,Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口,简单来说,就是我在本地调用了一个函数,或者对象的方法&…...
qt QSaveFile详解
QSaveFile 是 Qt 提供的一个类,用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性,以防止文件损坏。使用 QSaveFile,您可以创建一个临时文件,并在成功写入后将其重命名为目标文件,这样可以避免在写入过程…...
【Linux】线程池详解及其基本架构与单例模式实现
目录 1.关于线程池的基本理论 1.1.线程池是什么? 1.2.线程池的应用场景: 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数(HandlerTask) 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...
运输层知识点汇总3
目录 前言 二、为什么在TCP首部中有一个首部长度字段,而UDP的首部就没有这个字段? 三、一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号࿰…...
浔川社团官方联合会提前入驻
近期,我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容,用心创作每一篇文章,以展现我们社团的风采和理念。然而,这些不明网站未经授权的转发…...
比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
【实验名称】 实验一:绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders, 20 0000users, …...
C++研发笔记8——C语言程序设计初阶学习笔记6
在第一部分——课前准备的学习中,我就提到了学习C语言的过程中,练习是必不可少的环节,所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型: A.char B.d…...
wordpress baidu插件/做企业网站建设的公司
作者:闻币知天下 BitPay是世界上最受欢迎的比特币支付处理公司之一,因难以忍受BCE高额的交易成本,去年年底,BitPay在自己的支付平台和借记卡中添加比特币现金(BCH)支持,这标志着该平台支持更多加…...
做家具有那个网站好/外链网盘
GBase 8c 数据库支持版本升级。 语法如下: pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [option...] 描述: pg_upgrade允许存储在GBase 8c数据文件中的数据被升级到一个较新的版本。 GBase 8c发行通常会加入新的特性&#x…...
wordpress投稿图片/企业短视频推广
人脸识别技术的发展前景是怎样的? 智能时代已悄然到来,"刷脸"逐渐成为了新的风潮。在人脸识别技术商业化应用领域不断扩张的趋势下,"刷脸"办事正愈发常见。人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技…...
衡阳公司做网站/最新疫情消息
COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是最容易被人们误解的知识点之一COUNT()的作用COUNT()是一个特殊的函数,有两种非常不同的作用:统计某个列值的数量统计行数统计列值在统计列值时,要求列值是非空…...
在线音乐网站开发摘要/免费b站推广短视频
在本教程中,我们将学习44矩阵键盘以及Arduino键盘接口的工作原理。键盘是一种输入设备,用于输入密码,拨打号码,浏览菜单甚至控制机器人。您可能已经看到ATM上使用了键盘,安全系统,电话等,允许用…...
wordpress页眉导航栏位置/腰肌劳损的自我治疗和恢复的方法有什么?
1.Ubuntu系统,使用FFmpeg命令需要先安装 sudo apt install ffmpeg安装成功之后就可以使用ffmpeg 、ffplay、ffprobe等命令 2.格式转换 ffmpeg -i fly.mp4 fly.flv3.播放视频 ffplay fly.flv 4.查看视频信息 ffprobe fly.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2,…...