2024熵密杯初始题2
问题简要:
已知
counter = 0x7501E6EA
token = 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A
伪造出另一个可以通过验证的counter和token。
给出token生成及验证代码如下:
import binascii
from gmssl import sm3# 读取HMAC key文件
def read_hmac_key(file_path):with open(file_path, 'rb') as f:hmac_key = f.read().strip()return hmac_key# 生成token
def generate_token(hmac_key, counter):# 如果HMAC_KEY长度不足32字节,则在末尾补0,超过64字节则截断if len(hmac_key) < 32:hmac_key = hmac_key.ljust(32, b'\x00')elif len(hmac_key) > 32:hmac_key = hmac_key[:32]# 将计数器转换为字节表示counter_bytes = counter.to_bytes((counter.bit_length() + 7) // 8, 'big')# print("counter_bytes:", binascii.hexlify(counter_bytes))tobe_hashed = bytearray(hmac_key + counter_bytes)# print("tobe_hashed:", binascii.hexlify(tobe_hashed))# 使用SM3算法计算哈希值sm3_hash = sm3.sm3_hash(tobe_hashed)# 将SM3的哈希值转换为十六进制字符串作为tokentoken = sm3_hashreturn tokencurrent_counter = 0
def verify_token(hmac_key, counter, token):# 生成tokengenerated_token = generate_token(hmac_key, counter)global current_counter# 比较生成的token和输入的token是否相同if generated_token == token:if counter & 0xFFFFFFFF > current_counter:current_counter = counter & 0xFFFFFFFFprint("current_counter: ", hex(current_counter))return "Success"else:return "Error: counter must be increasing"else:return "Error: token not match"# 假设HMAC key文件路径
hmac_key_file = 'hmac_key.txt'# 假设计数器值
counter = 0x12345678# 读取HMAC key
hmac_key = read_hmac_key(hmac_key_file)# 生成token
token = generate_token(hmac_key, counter)
print("Generated token:", token)
print(verify_token(hmac_key, counter, token))
解题思路:
(1)token的生成算法为SM3,算法的输入包括2个部分:hmac_key||counter,其中hmac_key无法掌握,counter可自由选择。
(2)hmac_key为定长32字节,且以头部形式拼接counter。
(3)SM3算法分组长度64字节,输出长度32字节。
(4)通过以上分析,恰好符合Hash扩展长度攻击条件特征。
(之前以MD5算法为例介绍过Hash扩展长度攻击实例,有兴趣可以参考https://blog.csdn.net/ryanzzzzz/article/details/142325183 )
SM3算法的分组填充规则如下:
若输入长度L比特的消息,首先在消息末尾填充比特"1",然后填充k个"0",k满足L+k+1=448 mod 512的最小非负整数,最后填充64位的二进制串(L的二进制表示)。
开始构造新的counter:
(1)已掌握counter(7501E6EA),长度4字节
(2)0x80,长度1字节
(3)0x00 * 19,长度19字节
(4)0x0000000000000120,长度8字节
(5)0xAA * 4,长度4字节
即伪造的counter = 0x7501E6EA80000000000000000000000000000000000000000000000000000120AAAAAAAA
开始构造新的token:
(1)修改SM3算法代码,将IV值改为0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A(也就是掌握的token)
(2)修改SM3算法代码,将消息长度len += 512
(3)运行修改后SM3杂凑算法,输入0xAAAAAAAA,输出即为对应的token。
相关文章:
2024熵密杯初始题2
问题简要: 已知 counter 0x7501E6EA token 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A 伪造出另一个可以通过验证的counter和token。 给出token生成及验证代码如下: import binascii from gmssl import sm3# 读取HMAC ke…...
echarts属性之title
title 标题组件,包含主标题和副标题。 在 ECharts 2.x 中单个 ECharts 实例最多只能拥有一个标题组件。但是在 ECharts 3 中可以存在任意多个标题组件,这在需要标题进行排版,或者单个实例中的多个图表都需要标题时会比较有用。 例如下面不…...

VUE errolog, vue 错误集
I) installation As to command “npm install” on cmd or powershell, we must execute it under the program folder...
驱动开发系列13 - Linux tasklet用法介绍
一:概述 Tasklet 是 Linux 内核中的一种轻量级任务调度机制,通常用于在中断上下文中执行短小的任务。它们在软中断处理过程中被调用,允许将较长的处理工作延后到一个较低优先级的上下文中,以减少中断处理的延迟。Tasklet 的使用可以帮助开发者更好地管理系统资源,提高性能…...

redis实现分布式锁,go实现完整code
Redis分布式锁 Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式,可以保证在分布式环境中同一时间只有一个实例可以访问共享资源。 实现机制 以下是实现其加锁步骤: 获取锁 在 Redis 中,一个相同的key代表一把锁。是否拥有这把锁&…...

解析日期、编码
解析日期 这里指的是将字符串或者object类型的日期,转换成panda或python的日期类型。 主要的是dtype的变化:object / str —> datetime64[ns] # modules well use import pandas as pd import numpy as np import seaborn as sns import datetime# …...
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
restoreOverrideCursor() 是 Qt 中 QApplication 类提供的一个静态函数,用来恢复鼠标光标到应用程序之前设置的状态。 在 Qt 中,你可以使用 QApplication::setOverrideCursor() 来临时更改鼠标光标的外观。例如,当执行一些耗时操作时&#x…...

重生之“我打数据结构,真的假的?”--2.单链表(无习题)
C语言中的单链表总结 单链表是一种基础的数据结构,广泛应用于C语言编程中。它由节点组成,每个节点包含数据和指向下一个节点的指针。单链表的优点在于动态内存分配和高效的插入与删除操作。本文将详细探讨单链表的定义、基本操作、应用场景以及相关示例…...

【有啥问啥】视频插帧算法技术原理详解
视频插帧算法技术原理详解 引言 视频插帧(Video Interpolation)技术,作为计算机视觉领域的一项重要应用,旨在通过算法手段在已有的视频帧之间插入额外的帧,从而提升视频的帧率,使其看起来更加流畅。这一技…...
Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST
根源简述 这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧 题目描述 整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转…...

【蓝桥杯选拔赛真题77】python计算小球 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python计算小球 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python计算小球 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…...

获取Hive表备注
DESCRIBE EXTENDED 表名;先获取Detailed Table Information这行的data_type字段数据,进行正则匹配,拿到表备注,如下: String str ReUtil.get("parameters:\\{(?!.*?\\().*transient_lastDdlTime.*?comment(.*?)\\}&quo…...
10.30学习
一、科学计数法 C语言中的科学计数法主要用于表示非常大或非常小的浮点数,它遵循以下格式: 1. E或e表示指数: 科学计数法中的E或e用来表示“指数”(Exponent)。例如, 1.23e4 或 1.23E4 表示 1.23 * 10^4…...
什么是栈溢出
一、什么是栈溢出 栈溢出(Stack Overflow)就是指在程序运行过程中,往栈里存放的数据超过了栈所能容纳的最大容量,从而导致程序出现异常行为的情况。这就好比一个箱子本来只能装一定数量的物品,硬要往里面塞更多的东西&…...
在linux中arm-linux-gcc和/usr/bin/gcc有啥区别
在Linux中,arm-linux-gcc和/usr/bin/gcc都是编译器,但它们之间存在显著的区别,主要体现在编译目标、使用场景以及编译生成的二进制文件的可执行性上。而软链接则是Linux文件系统中的一种特殊文件类型,用于创建一个文件的别名。 a…...
常用环境部署(二十二)——MySQL的数据库迁移到另一个机器上
1、导出原数据库的数据 mysqldump -u [用户名] -p[密码] [数据库名] > database_dump.sql 命令示例: mysqldump -u root -p123456 wd > /opt/wd.sql 2、在新机器上创建数据库 mysql -u [用户名] -p -e "CREATE DATABASE [新数据库名]" 命令示…...
两台主机只能单方向ping通
可能性比较大的原因时ping不通的那台主机安装了个人防火墙。 在共享上网的机器中,出于安全考虑,大部分主机都安装个人防火墙软件。几乎所有个人防火墙软件默认不允许其他机器ping本机。一般的做法是将来自外部的ICMP请求报文滤掉,对本机出去的…...

redis windows 5.0 下载
Redis 简介 Redis 是一个高性能的 key-value 数据库,广泛应用于缓存、消息队列、实时分析等场景。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并且提供了丰富的操作命令,能够满足各种复杂的数据处理需求。 下载…...

视频转gif怎么转换?6种视频格式转换简单方法分享,附操作截图!
gif动图凭借其简洁而生动的特点,已成为互联网交流中不可或缺的一部分。尽管gif和视频在技术上有所不同,但两者都能以短小的帧展现动作,而gif通常不带声音,具备循环播放的特性。因此,出于创建gif动图、存储更多媒体文件…...

StructRAG简介
StructRAG是一种新型的框架,旨在提升大型语言模型(LLMs)在知识密集型推理任务中的性能。它通过推理时的混合信息结构化机制,根据任务需求以最合适的格式构建和利用结构化知识。 以下是StructRAG的核心组成部分和工作流程ÿ…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...