希尔伯特曲线
认识希尔伯特曲线
1 | 希尔伯特曲线是一种曲线,只要恰当选择函数,画出一条连续的参数曲线,当参数t在0,1区间取值时,曲线将遍历单位正方形中所有的点,得到一条充满空间的曲线。 希尔伯特曲线是一条连续而又不可导的曲线。 |
可以看看这个视频
希尔伯特曲线:无限数学怎样应用于有限世界(中英字幕)_哔哩哔哩_bilibili
简介
1 | 1890年,意大利数学家皮亚诺(Peano G)提出能填满一个正方形的曲线,叫做皮亚诺曲线。后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线。皮亚诺对区间[0,1]上的点和正方形上的点的对应作了详细的数学描述。实际上,正方形的这些点对于t∈[0,1],可规定两个连续函数x=f(t)和y=g(t),使得x和y取属于单位正方形的每一个值。 [1] |
1 | L系统记法: |
Hilbert曲线的性质
升阶
1 | 已经生成了上一阶 希尔伯特曲线 后生成下一阶,需要: |
编码映射
1 | 在希尔伯特曲线的构造过程中,可以对每个小正方形进行二进制编码。这样,正方形中的每个点都可以与一个[0,1]区间内的编码相对应,实现了从平面到一维区间的映射 |
构造
1 | 取一个正方形,并将其分成9个相等的小正方形。 |
算法
1 | public class Hilbert{ |
ctf例题
题型一:图片文件
JPGDiff
下载附件
hint.png
ct.png
hint.png提示是希伯尔特曲线,ct.png发现什么都不显示,查看属性
1*65536的图片
exp1:
1 | import PIL.Image |
运行得到
题型二:excel表格
你这flag保熟吗
下载附件
解压rar压缩包发现有密码,尝试foremost分离两个图片
excel查看password.xls
查看hint.txt
尝试按hint字符顺序连接
希伯尔特曲线
使用脚本来提取excel表格字符
exp:
1 | from hilbertcurve.hilbertcurve import HilbertCurve |
运行得到
base64循环解密
解压压缩包得到
1 |
|
bk解密
整理得到
1 | 117,111,122,116,123,83,114,82,114,82,121,118,105,103,95,88,102,105,101,118,95,49,72,95,49,72,95,52,95,101,101,48,109,119,118,105,117,102,33,95,120,102,105,101,118,125,101,114,114,111,114 |
转ascll
埃特巴什码解密
题型三:二维数组
Threebody
下载附件
stegsolve查看
被嘲讽了。。。
ps放大图片查看
发现像素排列有点规律
010查看像素值
再仔细观察可以发现,如果以4为周期的话相邻像素的数值就差不多了,考虑正常情况下该图片的像素点应该是每4个一组。相当于原始图片是四维的,这里被“降维打击”成了三维。我们这里需要做的,便是对图片进行升维处理。
BMP格式的头部有个biBitCount
字节是控制每个像素点所占的比特数,现在为24,也就是3个字节,我们将这个字段改为4个字节对应的32
保存后重新打开图片
stegsolve再一次查看
看到左上角有一些小白点,代表着那里隐藏着一些信息。使用StegSolve的Data Extract功能查看
根据这张照片和“David”的提示,通过一番搜索可得知这一位是知名的数学家大卫·希尔伯特
修改BMP的文件头,使得StegSolve把该通道识别为Alpha通道
exp:
1 | with open('E:\\希尔伯特\\threebody.bmp', 'rb') as f: |
运行得到
stegsolve查看
二维数组
搜索希尔伯特与三体看到这个视频
https://www.bilibili.com/video/BV1Sf4y147J9/
把二维的01矩阵降维成一维的二进制流
exp:
1 | import numpy as np |
运行得到一段代码
1 | #include <stdio.h> |
发现第十一行多出了大片的空白字符,由空格和Tab构成
把空格替换成0、Tab替换成1
exp:
1 | import re |
运行得到
1 | 01100110011011000110000101100111011110110100010000110001011011010100010101101110001101010110100100110000011011100100000101101100010111110101000001110010001100000011011000110001011001010110110101111101 |
二进制转字符串得到flag