实验一、DES加密算法编程实验 ────────────────────────────────── 一、实验目标 理解 DES 的整体结构:Feistel 网络、16 轮迭代、子密钥生成。 掌握 DES 核心部件的编程实现:IP / IP⁻¹、E-扩展、S-盒、P-置换、PC-1 / PC-2、左右移位。 熟悉分组密码工作模式与填充方式:本实验采用「每 64 bit 一块 + PKCS5 填充」。 通过加/解密验证程序正确性,并能对单步结果进行人工比对。 ────────────────────────────────── 二、实验环境 • 语言:Python 3.8+(仅标准库 + binascii)。 • 编辑器:VS Code / PyCharm / Jupyter Notebook 均可。 • 操作系统:Windows / macOS / Linux 不限。 • 额外工具: – 十六进制查看器(HxD、xxd) – 在线 DES 计算器(验证用) ────────────────────────────────── 三、实验任务与步骤 任务 1:单步调试与日志分析 在 des
以下是实现 DES 加密算法编程实验的 Python 代码: ```python import binascii # IP 置换表 IP = [58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7] # IP⁻¹ 置换表 IP_inv = [40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25] # E-扩展置换表 E = [32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16, 17, 18, 17, 18, 19, 20, 21, 22, 21, 22, 23, 24, 25, 26, 25, 26, 27, 28, 29, 30, 29, 30, 31, 32, 1, 2] # P-置换表 P = [16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25] # PC-1 置换表 PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4] # PC-2 置换表 PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32] # 左右移位表 shifts = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1] # S-盒 S_boxes = [ [ [14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7], [0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8], [4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0], [15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13] ], [ [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10], [3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5], [0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15], [13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9] ], [ [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8], [13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1], [13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7], [1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12] ], [ [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15], [13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9], [10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4], [3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14] ], [ [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9], [14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6], [4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14], [11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3] ], [ [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11], [10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8], [9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6], [4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13] ], [ [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1], [13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6], [1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2], [7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8] ], [ [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7], [1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2], [7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8], [2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11] ] ] def permute(block, table): """ 置换函数 :param block: 输入块 :param table: 置换表 :return: 置换后的块 """ return ''.join([block[i - 1] for i in table]) def left_shift(key, shift): """ 左移函数 :param key: 输入密钥 :param shift: 左移位数 :return: 左移后的密钥 """ return key[shift:] + key[:shift] def generate_subkeys(key): """ 生成 16 轮子密钥 :param key: 输入密钥 :return: 16 轮子密钥列表 """ key = bin(int(binascii.hexlify(key), 16))[2:].zfill(64) key = permute(key, PC1) C = key[:28] D = key[28:] subkeys = [] for i in range(16): C = left_shift(C, shifts[i]) D = left_shift(D, shifts[i]) CD = C + D subkey = permute(CD, PC2) subkeys.append(subkey) return subkeys def s_box_substitution(block): """ S-盒替换函数 :param block: 输入块 :return: 替换后的块 """ output = '' for i in range(8): sub_block = block[i * 6:(i + 1) * 6] row = int(sub_block[0] + sub_block[5], 2) col = int(sub_block[1:5], 2) s_box_output = bin(S_boxes[i][row][col])[2:].zfill(4) output += s_box_output return output def feistel_function(R, subkey): """ Feistel 函数 :param R: 右半部分 :param subkey: 子密钥 :return: Feistel 函数输出 """ E_R = permute(R, E) xor_result = bin(int(E_R, 2) ^ int(subkey, 2))[2:].zfill(48) s_box_output = s_box_substitution(xor_result) P_output = permute(s_box_output, P) return P_output def des_round(L, R, subkey, round_num): """ DES 一轮迭代 :param L: 左半部分 :param R: 右半部分 :param subkey: 子密钥 :param round_num: 轮数 :return: 新的左半部分和右半部分 """ if round_num == 5: # 选择第 5 轮进行单步调试 print(f"Round {round_num} Input:") print(f"L{i}: {L}") print(f"R{i}: {R}") E_R = permute(R, E) print(f"E(R{i}): {E_R}") xor_result = bin(int(E_R, 2) ^ int(subkey, 2))[2:].zfill(48) print(f"E(R{i}) XOR K{i}: {xor_result}") s_box_output = s_box_substitution(xor_result) print(f"S-Box Output: {s_box_output}") P_output = permute(s_box_output, P) [2025-11-09 22:06:30 | AI写代码神器 | 4096点数解答]
- [字节豆包] 实验一、DES加密算法编程实验 ────────────────────────────────── 一、实验目标 理解 DES 的整体结构:Feistel 网络、16 轮迭代、子密钥生成。 掌握 DES 核心部件的编程实现:IP / IP⁻¹、E-扩展、S-盒、P-置换、PC-1 / PC-2、左右移位。 熟悉分组密码工作模式与填充方式:本实验采用「每 64 bit 一块 + PKCS5 填充」。 通过加/解密验证程序正确性,并能对单步结果进行人工比对。 ────────────────────────────────── 二、实验环境 • 语言:Python 3.8+(仅标准库 + binascii)。 • 编辑器:VS Code / PyCharm / Jupyter Notebook 均可。 • 操作系统:Windows / macOS / Linux 不限。 • 额外工具: – 十六进制查看器(HxD、xxd) – 在线 DES 计算器(验证用) ────────────────────────────────── 三、实验任务与步骤 任务 1:单步调试与日志分析 在 des(4096点数解答 | 2025-11-09 22:06:30)27
- [字节豆包] 题目:按照以下步骤在 pycharm 中进行自动化测试脚本编写,并执行脚本。 步骤: (1)从 selenium 中引入 webdriver; (2)使用 selenium 模块的 webdriver 打开谷歌浏览器; (3)在谷歌浏览器中通过 get 方法发送网址eshop测试平台登录页面; (4)增加智能时间等待 5 秒; (5)查看登录页面中的用户名输入框元素,通过 css_selector 属性定位用户名输入框,并输入用户名(用自己注册的用户); (6)查看登录页面中的密码输入框元素,通过 xpath 属性定位密码输入框,并输入密码(用自己注册的用户对应密码) ; (7)查看登录页面中的登录按钮元素,通过 class_name 方法定位登录按钮,使用 click()方法点击登录按钮进入eshop测试平台首页; (8)在eshop测试平台首页通过 link_text 方法对“我的订单”按钮进行定位,使用 click()方法点击“我的订单”(304点数解答 | 2024-11-06 15:38:30)364
- [字节豆包] "D:\Pycharm - base directory\venv\Scripts\python.exe" "D:\Pycharm - base directory\venv\test 2025\数学建模\问题二.py" Traceback (most recent call last): File "D:\Pycharm - base directory\venv\test 2025\数学建模\问题二.py", line 60, in <module> prob += total_width_count >= order["quantity"] * 2 File "D:\Pycharm - base directory\venv\Lib\site-packages\pulp\pulp.py", line 1773, in __iadd__ raise TypeError("A False object cannot be passed as a constraint") TypeError: A False object cannot be passed a(597点数解答 | 2025-08-08 09:33:27)101
- d:pcharm\python项目vvenv\scripts)python.exe d:\pycharm\python项目\医院系统|1添加信息2查询信息3修改信息4删除信息 请输入需要的操作:1 1添加部门信息2添加医生信息3添加患者信息4添加护士信息5添加药品信息6添加患者 用药信息输入你要添加的信息 d:\pycharm\python项目\venv\scripts\python.exe d: \pycharm\pyth1添加信息2查询信息3修改信息4删除信息 请输入需要的操作:2 ' 1查询医生姓名及部门2查询科室的每个患者及其主治医师3查询科室就诊人数4查询患:者的主治医生及其职务科室5查询医 生主治的患者数量6查询患者用药情况7查询患者应缴金额8根据护 士编号查询护士姓名9查询同一 病房的患者 输入你要查询的内容: 1添加信息2查询信息3修改信息4删除信息 请输入需要的操作:3 1修改药品库存2修改药品价格修改患者使用药品数量 4修改患者预计出院时间5修改患者房间号码输入你要修改的内容:(31点数解答 | 2024-05-22 11:20:34)432
- [字节豆包] 加密 输入:明文,密钥; 输出:16轮子密钥,密文; 解密 输入:密文,密钥; 输出:16轮子密钥,明文; (836点数解答 | 2025-10-14 16:35:32)31
- [GPT] c++程序: 实现一个单门课程成绩管理系统。进入系统时,用户可选择身份:1.教师;2学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并允许修改部分数据。如果未保存数据,则允许教师录入新的数据。具体功能包括: 可录入或修改课程信息,包括:课程编号、课程名称; 可录入或修改课程的评分项目 (数量任意,不低于3项),包括:项目名称、所占分比例(需进行合法性检测,各项目比例之和为100%);示例如下: 项目名称 所占比例 实验 30% 作业 20% 期中考试 20% 期末考试 30% 注: 一旦录入学生成绩后,评分项目不允许修改;未录入成绩数据时,允许进行修改。 3.可录入、修改、刑除学生(学生数量不限)读门课程的各项成绩,并按照其比例自动算出总成绩;学生基本信息包括学号、姓名;示例如下: 请录入“c++编程”课程成绩 学号:201901 姓名:张三 实验:60 作业:70 期中考试:60 期未考试:80 信息显示功能。可显示课程信息、评分项目信息、所有学生的成绩单。 5.能够将上述数据保存在文件中,二进制、文本文件均可。(课程信息和评 分项目信息可保存一个文件,成绩单(6361点数解答 | 2024-05-24 02:01:02)421
- [字节豆包] 用jsonfilter 提取以下文本里 "ipv6-address": [ { "address": "fd15:e1bc:d052:1:20c:29ff:fe0a:a253", "mask": 64, "preferred": 0, "valid": 7196 }, { "address": "fd15:e1bc:d052:0:20c:29ff:fe0a:a253", "mask": 64, "preferred": 0, "valid": 7196 }, { "address": "2409:8a55:40b0:6ec0:20c:29ff:fe0a:a253", "mask": 64, "preferred": 592, "valid": 7196 }, { "address": "fd15:e1bc:d052:4:20c:29ff:fe0a:a253", "mask": 64, "preferred": 0, "valid": 7104 }, { "address": "fd15:e1bc:d052:2:20c:29ff:fe0a:a253", "mask": 64, "pref(507点数解答 | 2024-11-25 00:03:37)182
- [字节豆包] 下面是一个图书的单价表: 计算概论 28.9 元/本 数据结构与算法 32.7 元/本 数字逻辑 45.6元/本 c++程序设计教程 78 元/本 人工智能 35 元/本 计算机体系结构 86.2 元/本 编译原理 27.8元/本 操作系统 43 元/本 计算机网络 56 元/本 java程序设计 65 元/本 给定每种图书购买的数量,编程计算应付的总费用。 输入格式: 输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《c++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《java程序设计》的数量(以本为单位)。每两个整数用一个空格分开。 输出格式: 输出一行,包含一个浮点数,表示应付的总费用。精确到小数点后一位。 用c语言(291点数解答 | 2024-11-04 22:11:11)269
- [字节豆包] 题目描述 计算概论 28.9元/本 数字逻辑 45.6元/本 人工智能 35 元/本 编译原理 27.8元/本 计算机网络 56元/本 数据结构与算法 32.7元/本 C++程序设计教程 78元/本 计算机体系结构 86.2元/本 操作系统 43元/本 JAVA程序设计 65元/本 给定每种图书购买的数量,编程计算应付的总费用。 输入格式 输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。 输出格式 输出一行,包含一个浮点数f,表示应付的总费用。精确到小数点后一位。 输入样例 1 5 8 10 5 1 1 2 3 4 输出样例 2140.2 说明/提示 用c++语言完成(347点数解答 | 2025-11-03 14:32:27)19
- [字节豆包] 目标:根据以下数据,利用线性回归模型研究商品销售量y与广告投入x的关系,写出python代码 广告投入(百万元)5.50 6.75 7.25 7.00 6.50 5.25 6.00 4.50 8.25 9.50 销售量(百万件)11.50 13.70 14.83 14.15 13.06 11.71 12.16 9.96 15.88 18.33 任务:1) 写出本问题的线性回归模型; 2) 写出相应的目标函数l; 3) 通过闭式解的方式求y与x的关系; 4) 利用梯度下降法求y与x的关系; 5) 预测广告投入为1千万元时,商品的销售量情况。(712点数解答 | 2024-11-18 20:44:33)237
- [GPT] 目标:根据以下数据,利用线性回归模型研究商品销售量y与广告投入x的关系,写出python代码 广告投入(百万元)5.50 6.75 7.25 7.00 6.50 5.25 6.00 4.50 8.25 9.50 销售量(百万件)11.50 13.70 14.83 14.15 13.06 11.71 12.16 9.96 15.88 18.33 任务:1) 写出本问题的线性回归模型; 2) 写出相应的目标函数l; 3) 通过闭式解的方式求y与x的关系; 4) 利用梯度下降法求y与x的关系; 5) 预测广告投入为1千万元时,商品的销售量情况。(443点数解答 | 2024-11-18 20:47:31)240
- [阿里通义] 使用c语言贪心法完成下列问题的算法设计与代码编写 (1)多机调度问题 第一行输入 任务数量 7 第二行输入 任务处理时间 2 14 4 16 6 5 3 第三行输入 机器数量 3 输出 机器编号 任务 输出格式为: 机器编号 任务 0 4 1 2 2 5 2 6 2 3 1 7 2 1(665点数解答 | 2024-11-27 08:39:39)286