应用密码学第一次作业(9.23)
一、Please briefly describe the objectives of information and network security,such as confidentiality, integrity, availability , authenticity , and accountability
The objectives of information and network security include:
- Confidentiality: Protecting sensitive information from unauthorized access.
- Integrity: Ensuring data accuracy and preventing unauthorized modifications.
- Availability: Ensuring resources are accessible to authorized users when needed.
- Authenticity: Verifying the identities of users and systems to confirm that communications are genuine.
- Accountability: Ensuring that user and system actions can be tracked and recorded for auditing and compliance.
二、Please encrypt the message “ Must see you at the fifth teaching building”, by using Playfair cipher with the keyword “GUETT”
Fill the keyword matrix with the rest of letters ,and remove duplicate letters

Group plain text
Mu st se ey ou at th ef if th te ac hi ng bu il di ng
KT RA QA TX PG GA AF TD MB AF AT UH BN IA CG KM BL IA

Code examples are given below:
1.#include<iostream>
2.#include<cstring>
3.
4.using namespace std;
5.void encrypt()
6.{
7. const int N = 100;
8. char letters[26] = "ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵
9. int flag[25] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//字母是否已在矩阵中,与letters数组对应
10. char ch[5][5];//5X5矩阵
11. char ch1[N];//密钥
12. char ch2[N];//明文
13. char ch4;//无关字符
14. int len = 'a' - 'A';
15. cout << "输入密钥:";
16. cin >> ch1;
17. int flg = 1;
18. while (flg == 1)
19. {
20. for (int i = 0; i < strlen(ch1); i++)//把所输入的密钥转化为大写字母
21. {
22. if (ch1[i] > 'z' || ch1[i] < 'a')
23. {
24. cout << "请重新选择操作:" << endl;
25. flg = 0; break;
26. }
27. else
28. ch1[i] = ch1[i] - len;
29. }
30. if (flg == 1)
31. {
32. for (int i = 0; i < strlen(ch1); i++)//把密钥中的J都变为I
33. {
34. if (ch1[i] == 'J')ch1[i] = 'I';
35. }
36. int i = 0; int j = 0;
37. //把密钥中的字母填入到矩阵中,并把该字母标记为已用
38. for (int k = 0; k < strlen(ch1); k++)
39. {
40. for (int t = 0; t < 25; t++)
41. {
42. if (ch1[k] == letters[t] && flag[t] == 0)
43. {
44. ch[i][j] = letters[t];
45. flag[t] = 1;
46. if (j < 4)j++;
47. else { i++; j = 0; }
48. }
49. }
50. }
51. for (int k = 0; k < 25; k++)//按字母表顺序把未用字母依次填入到矩阵中
52. {
53. if (flag[k] == 0)
54. {
55. ch[i][j] = letters[k];
56. flag[k] = 1;
57. if (j < 4)j++;
58. else { i++; j = 0; }
59. }
60. }
61. cout << "密钥填充后的矩阵为: " << endl;
62. for (i = 0; i < 5; i++)
63. for (j = 0; j < 5; j++)
64. {
65. cout << ch[i][j];
66. cout << " ";
67. if (j == 4)
68. cout << endl;
69. }
70. cout << endl;
71. cout << "请输入明文(请输入英文字符):";
72. cin >> ch2;
73. cout << "输入一个无关字符:";
74. cin >> ch4;
75. if (ch4 >= 'a')
76. ch4 = ch4 - len;
77. for (int k = 0; k < strlen(ch2); k++)//把所输入的明文转化为大写字母
78. {
79. if (ch2[k] >= 'a')
80. ch2[k] = ch2[k] - len;
81. }
82. for (int k = 0; k < strlen(ch2); k++)//把明文中的J都变为I
83. {
84. if (ch2[k] == 'J')
85. ch2[k] = 'I';
86. }
87. //为明文添加必要的无关字符以防止同一组的两个字符相同
88. for (int k = 0; k < strlen(ch2); k += 2)
89. {
90. if (ch2[k] == ch2[k + 1])
91. {
92. for (int t = strlen(ch2); t > k; t--)
93. ch2[t + 1] = ch2[t];
94. ch2[k + 1] = ch4;
95. }
96. }
97. //若明文有奇数个字符,则添加一个无关字符以凑够偶数个
98. if (strlen(ch2) % 2 != 0)
99. {
100. ch2[strlen(ch2) + 1] = ch2[strlen(ch2)];//字符串结尾赋'\0'
101. ch2[strlen(ch2)] = ch4;//明文串尾插入无关字符
102. }
103. cout << "经过处理后的明文为:";
104. for (int k = 0; k < strlen(ch2); k += 2)
105. cout << ch2[k] << ch2[k + 1] << " ";
106. cout << endl;
107. cout << "其最终长度为:" << strlen(ch2) << endl;
108. //明文输入并整理完毕///
109. for (int k = 0; k < strlen(ch2); k += 2)
110. {
111. int m1, m2, n1, n2;
112. for (m1 = 0; m1 <= 4; m1++)
113. {
114. for (n1 = 0; n1 <= 4; n1++)
115. {
116. if (ch2[k] == ch[m1][n1])break;
117. }
118. if (ch2[k] == ch[m1][n1])break;
119. }
120. for (m2 = 0; m2 <= 4; m2++)
121. {
122. for (n2 = 0; n2 <= 4; n2++)
123. {
124. if (ch2[k + 1] == ch[m2][n2])break;
125. }
126. if (ch2[k + 1] == ch[m2][n2])break;
127. }
128. m1 = m1 % 5;
129. m2 = m2 % 5;
130. if (n1 > 4) { n1 = n1 % 5; m1 = m1 + 1; }
131. if (n2 > 4) { n2 = n2 % 5; m2 = m2 + 1; }
132. if (m1 == m2)
133. {
134. ch2[k] = ch[m1][(n1 + 1) % 5];
135. ch2[k + 1] = ch[m2][(n2 + 1) % 5];
136. }
137. else
138. {
139. if (n1 == n2)
140. {
141. ch2[k] = ch[(m1 + 1) % 5][n1];
142. ch2[k + 1] = ch[(m2 + 1) % 5][n2];
143. }
144. else
145. {
146. ch2[k] = ch[m1][n2];
147. ch2[k + 1] = ch[m2][n1];
148. }
149. }
150. }
151. cout << "加密后所得到的密文是:";
152. for (int k = 0; k < strlen(ch2); k += 2)
153. cout << ch2[k] << ch2[k + 1] << " ";
154. cout << endl;
155. }
156. else break;
157. }
158.
159.}
160.
161.//解密算法
162.void decrypt()
163.{
164. const int N = 100;
165. char letters[26] = "ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵
166. int flag[25] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
167. //标记字母是否已在矩阵中,与letters数组对应
168. char ch[5][5];//5X5矩阵
169. char ch1[N];//密钥
170. char ch2[N];//密文
171. int len = 'a' - 'A';
172. int flg = 1;
173. cout << "输入密钥:";
174. cin >> ch1;
175. while (flg == 1)
176. {
177. for (int i = 0; i < strlen(ch1); i++)//把所输入的密钥转化为大写字母
178. {
179. if (ch1[i] > 'z' || ch1[i] < 'a')
180. {
181. cout << "请重新选择操作:" << endl;
182. flg = 0; break;
183. }
184. else
185. ch1[i] = ch1[i] - len;
186. }
187. if (flg == 1)
188. {
189. for (int i = 0; i < strlen(ch1); i++)//把密钥中的J都变为I
190. {
191. if (ch1[i] == 'J')ch1[i] = 'I';
192. }
193. int i = 0; int j = 0;
194. //把密钥中的字母填入到矩阵中,并把该字母标记为已用
195. for (int k = 0; k < strlen(ch1); k++)
196. {
197. for (int t = 0; t < 25; t++)
198. {
199. if (ch1[k] == letters[t] && flag[t] == 0)
200. {
201. ch[i][j] = letters[t];
202. flag[t] = 1;
203. if (j < 4)j++;
204. else { i++; j = 0; }
205. }
206. }
207. }
208. for (int k = 0; k < 25; k++)//按字母表顺序把未用字母依次填入到矩阵中
209. {
210. if (flag[k] == 0)
211. {
212. ch[i][j] = letters[k];
213. flag[k] = 1;
214. if (j < 4)j++;
215. else { i++; j = 0; }
216. }
217. }
218. cout << "密钥填充后的矩阵为: " << endl;
219. for (i = 0; i < 5; i++)
220.
221. for (j = 0; j < 5; j++)
222. {
223. cout << ch[i][j];
224. cout << " ";
225. if (j == 4)
226. cout << endl;
227. }
228. cout << endl;
229. // 矩阵生成完毕
230. int f = 0;
231. do {
232. cout << "请输入密文(英文字符):";
233. cin >> ch2;
234. for (int k = 0; k < strlen(ch2); k++)//把所输入的密文转化为大写字母
235. {
236. if (ch2[k] >= 'a')
237. ch2[k] = ch2[k] - len;
238. }
239. for (int k = 0; k < strlen(ch2); k++)//把密文中的J都变为I
240. {
241. if (ch2[k] == 'J')ch2[k] = 'I';
242. }
243. for (int k = 0; k < strlen(ch2); k += 2)
244. {
245. if (ch2[k] == ch2[k + 1])
246. {
247. cout << "同一分组中不能出现相同字符!请重新输入。" << endl;
248. f = 1;
249. break;
250. }
251. else f = 2;
252. }
253. if (f == 1)continue;
254. if (strlen(ch2) % 2 != 0)
255. {
256. cout << "字符串不能为奇数个!请重新输入。" << endl;
257. f = 1;
258. }
259. else f = 2;
260. } while (f == 1);
261. //解密开始
262. for (int k = 0; k < strlen(ch2); k += 2)
263. {
264. int m1, m2, n1, n2;
265. for (m1 = 0; m1 <= 4; m1++)
266. {
267. for (n1 = 0; n1 <= 4; n1++)
268. {
269. if (ch2[k] == ch[m1][n1])break;
270. }
271. if (ch2[k] == ch[m1][n1])break;
272. }
273. for (m2 = 0; m2 <= 4; m2++)
274. {
275. for (n2 = 0; n2 <= 4; n2++)
276. {
277. if (ch2[k + 1] == ch[m2][n2])break;
278. }
279. if (ch2[k + 1] == ch[m2][n2])break;
280. }
281. m1 = m1 % 5;
282. m2 = m2 % 5;
283. if (n1 > 4) { n1 = n1 % 5; m1 = m1 + 1; }
284. if (n2 > 4) { n2 = n2 % 5; m2 = m2 + 1; }
285. if (m1 == m2)
286. {
287. ch2[k] = ch[m1][(n1 + 4) % 5];
288. ch2[k + 1] = ch[m2][(n2 + 4) % 5];
289. }
290. else
291. {
292. if (n1 == n2)
293. {
294. ch2[k] = ch[(m1 + 4) % 5][n1];
295. ch2[k + 1] = ch[(m2 + 4) % 5][n2];
296. }
297. else
298. {
299. ch2[k] = ch[m1][n2];
300. ch2[k + 1] = ch[m2][n1];
301. }
302. }
303. }
304. cout << "解密后所得到的明文是:";
305. for (int k = 0; k < strlen(ch2); k += 2)
306. cout << ch2[k] << ch2[k + 1] << " ";
307. cout << endl;
308. }
309. else break;
310. }
311.
312.}
313.
314.int main()
315.{
316.
317. int n;
318. cout << "请选择1加密2解密:" << endl;
319. while (true)
320. {
321. cin >> n;
322. switch (n)
323. {
324. case 1:
325. encrypt();
326. break;
327. case 2:
328. decrypt();
329. break;
330. default:
331. break;
332. }
333. }
334. return 0;
335.}
336.
三、Given the plain text{000102030405060708090A0B0C0D0E0F} and the key {010101010101010101010101010101011}:
a. Show the original contents of State, displayed as a 4 x 4 matrix.
00 01 02 03
04 05 06 07
08 09 0A 0B
0C 0D 0E 0F
b. Show the value of State after initial AddRoundKey.
01 00 03 02
05 04 07 06
09 08 0B 0A
0D 0C 0F 0E
c. Show the value of State after SubBytes.
7C 63 7B 77
6B F2 C5 6F
01 30 2B 67
D7 FE 76 AB
d. Show the value of State after ShiftRows.
7C 63 7B 77
F2 C5 6F 6B
2B 67 01 30
AB D7 FE 76
e. Show the value of State after MixColumns.
95 A2 B8 15
B5 0C 58 87
7E AA EF E6
50 12 E4 2E
#include<iostream>
1.using namespace std;
2.int StateMatrix[4][4]; // 状态矩阵
3.#define SIZE_M 4
4.#define SIZE_N 4
5.
6.int muti(int hex1, int hex2) {
7.
8. switch (hex1) {
9. case 0x01:
10. return hex2;
11. case 0x02:
12. if (hex2 >= 0x80) {
13. hex2 = hex2 << 1;
14. hex2 = hex2 % 32;
15. hex2 ^= 0x1b;
16. }
17.
18. else {
19. hex2 = hex2 << 1;
20. //hex2 = hex2 %16;
21. }
22.
23. return hex2;
24. case 0x03:
25. return muti(0x01, hex2) ^ muti(0x02, hex2);
26.
27. }
28. printf("出错啦!");
29. return -1;
30.
31.}
32.
33.int main() {
34.
35. //int matrix_a[SIZE_M][SIZE_N] = { {0x02,0x03,0x01,0x01},{0x01,0x02,0x03,0x01},{0x01,0x01,0x02,0x03},{0x03,0x01,0x01,0x02} };//a
36. //int matrix_b[SIZE_N][SIZE_S] = { {0x7C,0x63,0x7B,0x77},{0xF2,0xC5,0x6F,0x6B},{0x2B,0x67,0x01,0x30},{0xAB,0xD7,0xFE,0x76 } };//b
37.
38.
39. int input[SIZE_M][SIZE_N]= { {0x7C,0x63,0x7B,0x77},{0xF2,0xC5,0x6F,0x6B},{0x2B,0x67,0x01,0x30},{0xAB,0xD7,0xFE,0x76 } };
40.
41.
42.
43. for (int i = 0; i < 4; i++)
44.
45.
46. for (int j = 0; j < 4; j++) {
47.
48. StateMatrix[i][j] = input[i][j];
49.
50. }
51.
52.
53. int d0, d1, d2, d3;
54.
55. for (int i = 0; i < 4; i++) {
56.
57. d0 = muti(0x02, StateMatrix[0][i]) ^ muti(0x03, StateMatrix[1][i]);
58.
59. d0 ^= muti(0x01, StateMatrix[2][i]) ^ muti(0x01, StateMatrix[3][i]);
60.
61. d1 = muti(0x01, StateMatrix[0][i]) ^ muti(0x02, StateMatrix[1][i]);
62.
63.
64. d1 ^= muti(0x03, StateMatrix[2][i]) ^ muti(0x01, StateMatrix[3][i]);
65.
66.
67. d2 = muti(0x01, StateMatrix[0][i]) ^ muti(0x01, StateMatrix[1][i]);
68.
69. d2 ^= muti(0x02, StateMatrix[2][i]) ^ muti(0x03, StateMatrix[3][i]);
70.
71.
72. d3 = muti(0x03, StateMatrix[0][i]) ^ muti(0x01, StateMatrix[1][i]);
73.
74.
75. d3 ^= muti(0x01, StateMatrix[2][i]) ^ muti(0x02, StateMatrix[3][i]);
76.
77.
78. printf("第%d列的结果是:\n%x %x %x %x\n", i, d0, d1, d2, d3);
79.
80. StateMatrix[0][i] = d0;
81.
82. StateMatrix[1][i] = d1;
83.
84. StateMatrix[2][i] = d2;
85.
86. StateMatrix[3][i] = d3;
87.
88. }
89.
90. return 0;
91.
92.}
93.

四、Compute the output of the MixColumns transformation for the following sequence of input bytes “67 89 AB CD.” Apply the InvMixColumns transformation to the obtained result to verify your calculations. Change the first byte of the input from “67” to “77" perform the MixColumns transformation again for the new input, and determine how many bits have changed in the output.
Note: You can perform all calculations by hand or write a program supporting these computations. If you choose to write a program, it should be written entirely by you;no use of libraries or public domain source code is allowed in this assignment.
28 05 2F 8A

08 15 3F BA

相关文章:
应用密码学第一次作业(9.23)
一、Please briefly describe the objectives of information and network security,such as confidentiality, integrity, availability , authenticity , and accountability The objectives of information and network security include: Confidentiality: Protecting se…...
JSON合并工具
JSON合并工具 1. 项目概述 本项目旨在开发一个强大而灵活的JSON合并工具,能够合并多个JSON文件,处理复杂的嵌套结构,提供详细的合并报告,并实现全面的验证和错误处理机制。 2. 功能需求 2.1 基本合并功能 支持合并两个或多个…...
【网络编程】网页的显示过程
文章目录 1.URL 解析2.DNS 解析3.TCP三次握手4.服务器接收请求5.客户端接收响应 首先我们知道网页经过网络总共有应用层,传输层,网络层,数据链路层,物理层 1.URL 解析 将获得的网址解析出协议,主机名,域名…...
用nginx-rtmp-win32-master及ffmpeg模拟rtmp视频流
效果 使用nginx-rtmp-win32-master搭建RTMP服务 双击exe就可以了。切记整个目录不能有中文 README.md ,启用后本地的RTM路径: rtmp://192.168.1.186/live/xxx ffmpeg将地本地视频推RMTP F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -c c…...
使用python-pptx将PPT转换为图片:将每张幻灯片保存为单独的图片文件
哈喽,大家好,我是木头左! 本文将详细介绍如何使用python-pptx将PPT的每一张幻灯片保存为单独的图片文件。 安装python-pptx库 需要确保已经安装了python-pptx库。可以通过以下命令使用pip进行安装: pip install python-pptx导入所需库 接下来,需要导入一些必要的库,包…...
聊聊企业的低代码实践背景与成效
数字化转型的道路充满挑战是大家的普遍共识,许多企业仍未完全步入数字化的行列,它们面临的是系统的碎片化和操作的复杂性。在数字优先的今天,企业要想维持竞争力,比任何时期都更需要实施某种程度的数字化升级。如果一个组织难以提…...
zookeeper面试题
1. 什么是zookeeper zookeeper是一个开源的 分布式协调服务。他是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。 Zooke…...
Linux学习笔记13---GPIO 中断实验
中断系统是一个处理器重要的组成部分,中断系统极大的提高了 CPU 的执行效率,本章会将 I.MX6U 的一个 IO 作为输入中断,借此来讲解如何对 I.MX6U 的中断系统进行编程。 GIC 控制器简介 1、GIC 控制器总览 I.MX6U(Cortex-A)的中断控制器…...
[Redis][Hash]详细讲解
目录 0.前言1.常见命令1.HSET2.HGET3.HEXISTS4.HDEL5.HKEYS6.HVALS7.HGETALL8.HMGET9.HLEN10.HSETNX11.HINCRBY12.HINCRBYFLOAT 2.内部编码1.ziplist(压缩链表)2.hashtable(哈希表) 3.使用场景4.缓存方式对比1.原⽣字符串类型2.序列化字符串类型3.哈希类型 0.前言 在Redis中&am…...
上半年亏损扩大/百亿资产重组终止,路畅科技如何“脱困”?
在智能网联汽车市场形势一片大好的前提下,路畅科技上半年的营收却出现了下滑,并且亏损也进一步扩大。 2024年半年度报告显示,路畅科技营业收入1.35亿元,同比下滑7.83%;实现归属上市公司股东的净利润为亏损2491.99万元…...
协议IP规定,576字节和1500字节的区别
576字节和1500字节的区别主要在于它们是IP数据报在数据链路层中的最大传输单元(MTU)的不同限制。 576字节:这个数值通常与IP层(网络层)的数据报有关,它指的是在不进行分片的情况下,IP数据…...
对抗攻击的详细解析:原理、方法与挑战
对抗攻击的详细解析:原理、方法与挑战 对抗攻击(Adversarial Attack)是现代机器学习模型,尤其是深度学习模型中的一个关键安全问题。其本质在于,通过对输入数据添加精微的扰动,人类难以察觉这些扰动&#…...
Python办公自动化教程(003):PDF的加密
【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…...
python全栈学习记录(十七)logging、json与pickle、time与datatime、random
logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…...
【艾思科蓝】JavaScript在数据可视化领域的探索与实践
【ACM出版 | EI快检索 | 高录用】2024年智能医疗与可穿戴智能设备国际学术会议(SHWID 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看 学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言 JavaScript可视化库概览 D3.js基础入门 1. 引入…...
【标准库的典型内容】std::declval
一、 d e c l v a l declval declval的基本概念和常规范例 s t d : : d e c l v a l std::declval std::declval 是 C 11 C11 C11标准中出现的一个函数模板。这个函数模板设计的比较奇怪(没有实现,只有声明),因此无法被调用&…...
深入了解package.json文件
在前端项目开发中,我们经常会遇到package.json文件。这个文件不仅是一个简单的配置文件,它还承担了项目管理的重任。下面,我们将深入探讨package.json文件的各个字段和作用,并通过实例来帮助你更好地理解和使用它。 package.json…...
【基础知识】网络套接字编程
套接字 IP地址 port(端口号) socket(套接字) socket常见API //创建套接字 int socket(int domain, int type, int protocol); //绑定端口 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //监听套接字…...
小程序地图展示poi帖子点击可跳转
小程序地图展示poi帖子点击可跳转 是类似于小红书地图功能的需求 缺点 一个帖子只能有一个点击事件,不适合太复杂的功能,因为一个markers只有一个回调回调中只有markerId可以使用。 需求介绍 页面有地图入口,点开可打开地图界面地图上展…...
传统到AI 大数据分析的演变,颠覆智慧水电的未来?
传统到AI 大数据分析的演变,颠覆智慧水电的未来? 前言传统到AI 大数据分析的演变 前言 水电作为一种重要的能源形式,一直在我们的生活中扮演着至关重要的角色。而如今,随着科技的飞速发展,智慧水电和 AI 大数据应用的…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
