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

矩阵 m * M = c

文章目录

    • 题1
    • 题2

题1

(2023江苏领航杯-prng)
题目来源:https://dexterjie.github.io/2023/09/12/%E8%B5%9B%E9%A2%98%E5%A4%8D%E7%8E%B0/2023%E9%A2%86%E8%88%AA%E6%9D%AF/
题目描述:
(没有原数据,自己生成的数据)

from Crypto.Util.number import *              
from secret import flag              
import random              def base(n, l):              bb = []              while n > 0:              n, r = divmod(n, l)              bb.append(r)              return ''.join(str(d) for d in bb[::-1])              def prng(secret):                seed = base(secret, 5)              seed = [int(i) for i in list(seed)]              length = len(seed)              R = [[ random.randint(0,4) for _ in range(length)] for _ in range(length*2)]              S = []              for r in R:              s = 0              for index in range(length):              s += (r[index] * seed[index]) % 5              s %= 5              S.append(s)              return R, S              m = bytes_to_long(flag)              
R, S = prng(m)              with open('output.txt', 'w') as f:              f.write(f'R = {R}\nS = {S}')

题目分析:
( R 1 , 1 R 1 , 2 ⋯ R 1 , n R 2 , 1 R 2 , 2 ⋯ R 2 , n ⋮ ⋮ ⋱ ⋮ R 2 n , 1 R 2 n , 2 ⋯ R 2 n , n ) ∗ ( s e e d 1 s e e d 2 ⋮ s e e d n ) = ( S 1 S 2 ⋯ S 2 n ) \begin{pmatrix} R_{1,1}&R_{1,2}&\cdots&R_{1,n}\\ R_{2,1}&R_{2,2}&\cdots&R_{2,n}\\ \vdots&\vdots&\ddots&\vdots\\ R_{2n,1}&R_{2n,2}&\cdots&R_{2n,n} \end{pmatrix}* \begin{pmatrix} seed_1\\ seed_2\\ \vdots\\ seed_n \end{pmatrix} = \begin{pmatrix} S_1&S_2&\cdots&S_{2n} \end{pmatrix} R1,1R2,1R2n,1R1,2R2,2R2n,2R1,nR2,nR2n,n seed1seed2seedn =(S1S2S2n)
5进制,R * seed = S,已知R,S求seed

from Crypto.Util.number import *              
from gmpy2 import *
with open('output1.txt') as f:exec(f.read())
p = 5
R = matrix(GF(5),R).transpose()
S = matrix(GF(5),S)
m = R.solve_left(S).list()
print(long_to_bytes(int(''.join(str(i) for i in m),5)))# CnHongKe{a8cc755d375811f55cec82153388c}

题2

题目来源:https://blog.csdn.net/weixin_52640415/article/details/132925227?spm=1001.2014.3001.5502
题目描述:
(没有原数据,自己生成的数据)

import os
import secret
import hashlib
from Crypto.Util.number import getPrime
from Crypto.Util.Padding import padLEN = 32def xor(a, b):return bytes([a[i%len(a)] ^^ b[i%len(b)] for i in range(max(len(a), len(b)))])def challenge(m: bytes, pbits: int, level: int=0):p = getPrime(pbits)M = random_matrix(GF(p), LEN).matrix_from_rows_and_columns(range(LEN), range(LEN-level))c = vector(GF(p), m) * Mreturn {"p": p, "M": M.list(), "c": c.list()}args = {"chall1": {"m": os.urandom(LEN),"pbits": 512,"level": 0x00},"chall2": {"m": os.urandom(LEN),"pbits": 10,"level": 0x01},"chall3": {"m": os.urandom(LEN),"pbits": 256,"level": 0x10}
}out = dict()
enc = pad(secret.flag, LEN)
for i in range(3):out[f"chall{i+1}"] = challenge(**args[f"chall{i+1}"])enc = xor(enc, hashlib.sha512(args[f"chall{i+1}"]["m"]).digest())
out["enc"] = enc.hex()
with open('output.txt', 'w') as f:f.write(f"{out = }")

题目分析:
m ∗ M = c ,已知 M , c 求 m 共有三组数据,求解三组矩阵 第一组: m 1 ∗ 32 ∗ M 32 ∗ 32 = c 1 ∗ 32 第二组: m 1 ∗ 32 ∗ M 32 ∗ 31 = c 1 ∗ 31 第三组: m 1 ∗ 32 ∗ M 32 ∗ 16 = c 1 ∗ 16 m * M = c,已知M,c求m\\ 共有三组数据,求解三组矩阵\\ 第一组:m_{1*32} * M_{32 * 32} = c_{1 * 32}\\ 第二组:m_{1 * 32} * M_{32 * 31} = c_{1 * 31}\\ 第三组:m_{1 * 32} * M_{32 * 16} = c_{1 * 16}\\ mM=c,已知M,cm共有三组数据,求解三组矩阵第一组:m132M3232=c132第二组:m132M3231=c131第三组:m132M3216=c116
第一组为方阵,用solve_left()直接解

with open('output.txt') as f:exec(f.read())
len = 32p1,M1,c1 = out['chall1']['p'],out['chall1']['M'],out['chall1']['c']
M1 = Matrix(GF(p1),len,len,M1)
c1 = vector(GF(p1),c1)
m1 = M1.solve_left(c1)
print(m1)
bytes([i for i in m1])# b'\xcd\xf4\xd6\xa5#\xa2\x04~q\xf6\x90\xb6@\xf9Z\xbd\x1fw\xfe\\w\xc3\xad\xabQZBQk\xa0L\xc5'

话说非方阵是有无数组解的,solve_left()也可解非方阵,比如题1,所以来到第二组
看大佬博客是这样解的:

p2,M2,c2 = out['chall2']['p'],out['chall2']['M'],out['chall2']['c']
M2 = Matrix(GF(p2),len,len-1,M2)
c2 = Matrix(GF(p2),1,31,c2)
m2 = M2.solve_left(c2).list()
print(m2)basis = M2.left_kernel().basis()[0]
for k in range(p2):  try:m21 = m2 + k * basisprint(k, bytes(m21.list())) # 题目中m是byte类型,把超过256的过滤掉except:pass

说明一下
basis 是矩阵 M 的左核空间(left kernel space)中的一个基向量。
左核空间是指满足方程 M * v = 0 的所有向量 v 的集合。
这些向量使得将它们与矩阵 M 进行乘法运算的结果为零向量

不过我很不理解为什么出来的m2是1 * 32的(虽然最后一个元素是0),但不应该是1 * 31吗。题1也不是这样啊,题一求得的seed是1 * n的。这个疑问先留下,我们继续。

这里确实是特殊的,题目中明确了m是byte类型,范围是1~256,不过有限域的范围是p,比256大得多,故通过M2.solve_left(c2)得到的m2并不是最终解,只能说这也是一个解,不过不是我们需要的解。通过爆破将解中的元素锁定在 1 ~ 256的范围内。(通过看他写的题解,我是这样理解的)

第三部分

试了下用solve_left()解,结果可想而知,是有解,不过不是我们要的,解出的数值太太太大了,M3与方阵相差太大,造basis也没用了。
如何将解中数值的范围锁定在1 ~ 256?------ 格基规约(又学到了,记下)
佬的方法:
构造如下块矩阵 ( M 1 p 0 c 0 ) 49 ∗ 48 其中 1 是 32 ∗ 32 的单位矩阵 p = ( p p ⋱ p ) 16 ∗ 16 构造如下块矩阵\\ \begin{pmatrix} M&1\\ p&0\\ c&0 \end{pmatrix}_{49 * 48}\\ \ \\ 其中1是32 * 32的单位矩阵\\ \ \\ p = \begin{pmatrix} p&&&\\ &p&&\\ &&\ddots&\\ &&&p \end{pmatrix}_{16 * 16} 构造如下块矩阵 Mpc100 4948 其中13232的单位矩阵 p= ppp 1616
规约后第二行是目标向量,第一行是0向量

p3,M3,c3 = out['chall3']['p'],out['chall3']['M'],out['chall3']['c']
M3 = matrix(ZZ,32,16,M3)
c3 = matrix(ZZ,1,16,c3)
A = block_matrix([[M3,1],[Integer(p3),0],[c3,0]])
m33 = A.LLL()
m3 = bytes(map(abs,m33[1][16:]))
print(m3)
# b'f\xcb\xf1L\xaf\xf2\xf3@a\\4\xb4[op\xa1`\x0c\x0b\x89\xa7\x1e?\x10x\x1e\xf68\xb8\xb9\x9d\xb9'

之后全部异或即可得到flag

from hashlib import *
m1 = sha512(b'\xcd\xf4\xd6\xa5#\xa2\x04~q\xf6\x90\xb6@\xf9Z\xbd\x1fw\xfe\\w\xc3\xad\xabQZBQk\xa0L\xc5').digest()
m2 = sha512(b'\x90\x1b\x87\x9c!\xe4\x92\xef\xd4\xe8\x94\x8f\x1c,\x02N\x80\x97\xb5ep\x90\x06\x8f ]\xba\x9f\xc1N\xb8Z').digest()
m3 = sha512(b'f\xcb\xf1L\xaf\xf2\xf3@a\\4\xb4[op\xa1`\x0c\x0b\x89\xa7\x1e?\x10x\x1e\xf68\xb8\xb9\x9d\xb9').digest()
enc = bytes.fromhex('496415ff125bacee09c8e721f8adf44158e398a854a48415110d0cf88fdc03767b93f91142e035e718d6ad6b7965d15a973cb9fb97923d1a37580cf60f48eabc')
print(len(m1),len(m2),len(m3))
flag = bytes([m1[i] ^ m2[i] ^ m3[i] ^ enc[i] for i in range(len(enc))])
print(flag)

浅记一下:

解疑:为什么是1 * 32 而不是1 * 31,我觉得应该是相差太小,而且,最后一位本来就是0,没有实际意义,它乘出来的结果和 1 * 31乘出来的结果本就相同,故这个1 * 32 的结果很大意义上是等同于1 * 31 的。

还有,不要用题2第三部分的解法去解题1,没用,解不出,如果对题1构造格,格中向量与想要得到的目标向量相差过小(都在GF(5)中),规约不出,得不到结果。

题2真的学到了
记点:块矩阵的构造,left_kernel().basis()的应用

还有一点,题2不要构造下面这种,也得不到结果,矩阵构造不一样结果不一样很正常,反正就是那个对按哪个来。嗯,没了。
( M 1 , 1 ⋯ M 1 , 16 1 M 2 , 1 ⋯ M 2 , 16 1 ⋮ ⋱ ⋮ ⋱ M 32 , 1 ⋯ M 32 , 16 1 p ⋯ p c 1 ⋯ c 16 ) 34 ∗ 48 \begin{pmatrix} M_{1,1}&\cdots&M_{1,16}&1&&&\\ M_{2,1}&\cdots&M_{2,16}&&1&&\\ \vdots&\ddots&\vdots&&&\ddots&\\ M_{32,1}&\cdots&M_{32,16}&&&&1\\ p&\cdots&p\\ c_1&\cdots&c_{16} \end{pmatrix}_{34*48} M1,1M2,1M32,1pc1M1,16M2,16M32,16pc16111 3448

相关文章:

矩阵 m * M = c

文章目录 题1题2 题1 (2023江苏领航杯-prng) 题目来源:https://dexterjie.github.io/2023/09/12/%E8%B5%9B%E9%A2%98%E5%A4%8D%E7%8E%B0/2023%E9%A2%86%E8%88%AA%E6%9D%AF/ 题目描述: (没有原数据,自己生成的数据) from Crypto.Util.number…...

Linux——IO

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;是不是只有C/C有文件操作呢&#xff1f;python&#xff0c;java&…...

svn(乌龟svn)和SVN-VS2022插件(visualsvn) 下载

下载地址: https://www.visualsvn.com/visualsvn/download/...

开源日报 0824 | 构建UI组件和页面的前端工作坊

Storybook 是一个用于构建 UI 组件和页面的前端工作坊&#xff0c;支持多种主流框架&#xff0c;提供丰富的插件&#xff0c;具有可配置性强和扩展性好的特点。 storybookjs/storybook Stars: 79.9k License: MIT Storybook 是一个用于构建 UI 组件和页面的前端工作坊&#x…...

福建三明大型工程机械3D扫描工程零件三维建模逆向抄数-CASAIM中科广电

高精度3D扫描技术已经在大型工件制造领域发挥着重要作用&#xff0c;可以高精度高效率实现全尺寸三维测量&#xff0c;本期&#xff0c;我们要分享的应用是大型工程机械3D扫描案例。 铣轮是深基础施工领域内工法先进、技术复杂程度高、高附加值的地连墙设备&#xff0c;具有成…...

使用香橙派学习 Linux的守护进程

Q&#xff1a;什么是守护进程 A&#xff1a;Linux Daemon&#xff08;守护进程&#xff09;是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行 某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务&#xff0c;不是对整个系统就是对某个…...

数据治理-数据仓库和商务智能

数据仓库的作用 减少数据冗余&#xff0c;提高信息一致性&#xff0c;让企业能够利用数据做出更优决策的方法&#xff0c;数据仓库是企业数据管理的核心。 业务驱动因素 运营支持职能、合规需求&#xff08;历史数据响应&#xff09;和商务智能活动&#xff08;主因&#xff1…...

CH2--x86系统架构概览

2.1 OVERVIEW OF THE SYSTEM-LEVEL ARCHITECTURE 图中的实线箭头表示线性地址&#xff0c;虚线表示段选择器&#xff0c;虚线箭头表示物理地址 2.1.1 Global and Local Descriptor Tables 全局描述符表 (GDT) GDT是一个全局的段描述符表&#xff0c;它存储在系统内存中的一个固…...

Immutable.js API 简介

Immutable-js 这个库的实现是深拷贝还是浅拷贝&#xff1f;immutable 来源immutable.js三大特性&#xff1a; 持久化数据结构结构共享惰性操作 Immutable.js 的几种数据类型 immutable 使用 使用 npm 安装 immutable&#xff1a; 常用API介绍 MapListList.isList() 和 Map.isMa…...

HLSL 入门(一)

HLSL High Level Shader Language 高级着色语言&#xff0c;是Direct3D中用来编写Shader的语言。其语法类似于C语言。 虽然其主要作用是用来编写例如顶点着色器&#xff0c;像素着色器。但本质是对图形并行管线进行编程&#xff0c;因此也能用来编写用于计算的着色器&#xff…...

【Docker】挂载数据卷

一、Docker数据卷说明及操作 在Docker中挂载数据卷是一种将数据持久化保存的方法&#xff0c;以便容器之间或容器与主机之间共享数据。以下是如何在Docker中挂载数据卷的步骤&#xff1a; 1、创建数据卷 首先&#xff0c;您需要创建一个数据卷。可以使用以下命令创建一个数据卷…...

[技术干货]spring 和spring boot区别

Spring 和 Spring Boot 都是 Java 框架&#xff0c;用于构建企业级应用程序。Spring 是一个完整的框架&#xff0c;提供各种功能&#xff0c;包括依赖注入、事务管理、数据访问、Web 开发等。Spring Boot 是一个基于 Spring 的框架&#xff0c;旨在简化 Spring 应用程序的开发和…...

【hudi】数据湖客户端运维工具Hudi-Cli实战

数据湖客户端运维工具Hudi-Cli实战 help hudi:student_mysql_cdc_hudi_fl->help AVAILABLE COMMANDSArchived Commits Commandtrigger archival: trigger archivalshow archived commits: Read commits from archived files and show detailsshow archived commit stats: …...

RK3588 添加ROOT权限

一.ROOT简介 ROOT权限是Linux和Unix系统中的超级管理员用户帐户&#xff0c;该帐户拥有整个系统的最高权利&#xff0c;可以执行几乎所有操作。ROOT就是获取安卓系统中的最高用户权限&#xff0c;以便执行一些需要高权限才能执行的操作(包括卸载系统自带程序、刷机、备份、还原…...

【云原生】k8s-----集群调度

目录 1.k8s的list-watch机制 1.1 list-watc机制简介 1.2 根据list-watch机制&#xff0c;pod的创建流程 2.scheduler的调度策略 2.1 scheduler的调度策略简介 2.2 Scheduler预选策略的算法 2.3 Scheduler优选策略的算法 3. k8s中的标签管理及nodeSelector和nodeName的 调…...

一键集成prometheus监控微服务接口平均响应时长

一、效果展示 二、环境准备 prometheus + grafana环境 参考博文:https://blog.csdn.net/luckywuxn/article/details/129475991 三、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter...

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…...

mybatis mapper.xml转建表语句

从网上下载了代码&#xff0c;但是发现没有DDL建表语句&#xff0c;只能自己手动创建了&#xff0c;感觉太麻烦&#xff0c;就写了一个工具类 将所有的mapper.xml放入到一个文件夹中&#xff0c;程序会自动读取生成建表语句 依赖的jar <dependency><groupId>org.d…...

封装使用Axios进行前后端交互

Axios是一个强大的HTTP客户端&#xff0c;用于在Vue.js应用中进行前后端数据交互。本文将介绍如何在Vue中使用Axios&#xff0c;并通过一个企业应用场景来演示其实际应用。 Axios简介 公众号&#xff1a;Code程序人生&#xff0c;个人网站&#xff1a;https://creatorblog.cn A…...

SOA、分布式、微服务

SOA&#xff1a; SOA是一种软件设计架构&#xff0c;用于构建分布式系统和应用程序。它将应用程序拆分为一系列松耦合的服务&#xff0c;这些服务通过标准化的接口进行通信&#xff0c;并能够以可编程方式组合和重用。SOA的目标是提高系统的灵活性、可扩展性和可维护性。 特点&…...

json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及bytes指定长度分割

json数据传输压缩以及数据切片分割分块传输多种实现方法&#xff0c;大数据量情况下zlib压缩以及bytes指定长度分割。 import sys import zlib import json import mathKAFKA_MAX_SIZE 1024 * 1024 CONTENT_MIN_MAX_SIZE KAFKA_MAX_SIZE * 0.9def split_data(data):"&q…...

移动端APP测试-如何指定测试策略、测试标准?

制定项目的测试策略是一个重要的步骤&#xff0c;可以帮助测试团队明确测试目标、测试范围、测试方法、测试资源、测试风险等&#xff0c;从而提高测试效率和质量。本篇是一些经验总结&#xff0c;理论分享。并不是绝对正确的&#xff0c;也欢迎大家一起讨论。 文章目录 一、测…...

【Redis】深入探索 Redis 主从结构的创建、配置及其底层原理

文章目录 前言一、对 Redis 主从结构的认识1.1 什么是主从结构1.2 主从结构解决的问题 二、主从结构创建2.1 配置并建立从节点2.2.1 从节点配置文件2.2.2 启动并连接 Redis 主从节点2.2.3 SLAVEOF 命令2.2.4 断开主从关系 2.2 查看主从节点的信息2.2.1 INFO REPLICATION 命令2.…...

CSS 滚动驱动动画 scroll-timeline ( scroll-timeline-name ❤️ scroll-timeline-axis )

scroll-timelinescroll-timeline-name❤️scroll-timeline-axis 解决问题语法 animation-timeline-nameanimation-timeline-axis scroll-timeline ( scroll-timeline-name ❤️ scroll-timeline-axis ) 在 scroll() 的最后我们遇到了因为定位问题导致滚动效果失效的情况, 当…...

9.19号作业

2> 完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QDebug> #include <QColorDialog> #include <QColor&g…...

Mybatis学习笔记9 动态SQL

Mybatis学习笔记8 查询返回专题_biubiubiu0706的博客-CSDN博客 动态SQL的业务场景&#xff1a; 例如 批量删除 get请求 uri?id18&id19&id20 或者post id18&id19&id20 String[] idsrequest.getParameterValues("id") 那么这句SQL是需要动态的 还…...

element表格 和后台联调

1.配置接口 projectList:/api/goods/xxx,//产品列表2.请求接口(get请求默认参数page) // 产品列表 pageprojectList(params){return axios.get(base.projectList,{params})}3.获取数据 直接放到created里边去了 刷新页面就可以看到 async projectList(page){let res await t…...

基于SSM的智慧城市实验室主页系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

怒赞,阿里P8推荐的Java面试宝典:41个专题PDF(史上最全+面试必备)

《尼恩Java面试宝典》 40岁老架构师 尼恩 经过对大量 Java面试题 的不断梳理、迭代&#xff0c; 编著成5000页的《尼恩Java面试宝典》&#xff0c;致力于体系化&#xff0c; 系统化&#xff0c;形象化 梳理&#xff0c;形成一个大的知识体系&#xff0c;从而帮助大家 进大厂&a…...

线程池各个参数设置说明

1. corePoolSize 核心线程数 看处理业务属于IO密集型还是属于cpu密集型IO密集型: 通常设置为N1&#xff0c;还有一个计算公式&#xff1a;线程数 cpu数*&#xff08;线程等待时间/线程总的处理时间&#xff09; 但是由于服务器除了这个服务可能还部署有其他服务&#xff0c;…...

dw 做网站模板/搜索排名影响因素

1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5258 Solved: 2098[Submit][Status][Discuss]Description lxhgww最近迷上了一款游戏&#xff0c;在游戏里&#xff0c;他拥有很多的装备&#xff0c;每种装备都有2个属性&#xff0c;这些属性的值用[1,1…...

wordpress添加端口访问不了/软文大全

1.C#中的垃圾回收机制是怎样的&#xff1f;垃圾回收器是用来管理应用程序的内存分配和释放的。当一个应用程序在运行的时候&#xff0c;垃圾回收器设置了一个托管堆。每次当开发人员使用 new 运算符创建对象时&#xff0c;运行库都从托管堆为该对象分配内存。新创建的对象被放在…...

怎么把网站加入黑名单/软文发布平台排名

在各种场合遇到其他产品的开发人员时&#xff0c;大家总忍不住想在技术上切磋两招。第一句问的通常都是“你们产品的崩溃率是多少&#xff1f;”程序员 A 自豪地说&#xff1a; “百分之一。”旁边的程序员 B 鄙视地看了一眼&#xff0c;然后喊到&#xff1a; “千分之一&#…...

天津做网站比较大的公司/公众号怎么推广和引流

郑骁庆老师一直从事数据集成和人工智能方面的教学和科研工作&#xff0c;对算法理论与技术有着深入的研究&#xff0c;承担国家自然科学基金和国家科技支撑项目&#xff0c;任教期间赴美国麻省理工学院信息技术组从事研究工作&#xff0c;并不断将科学研究和国际学术交流的成果…...

wordpress显示/成品短视频网站源码搭建

一行代码的事情&#xff0c;...

网站开发与程序开发/上优化seo

T-CODE: MASS 批量更改MASS_CHARVAL 特征的批量维护MASS_EINE 信息记录的成批维护MASS_EKKO 采购订单的成批维护MASS_MARC 后勤/配送的成批维护MASS_MEAN 全球贸易项目编号的批量维护MASS_VENDOR 供应商的成批维护MASSD 批量维护MASSOBJ 维护大量维护对象MASSS2V 将系统变式复制…...