SUSCTF2022misc——Tanner

这篇博客介绍了如何利用Tanner图和校验矩阵进行码字还原。作者通过Python脚本展示了如何根据给定的校验矩阵生成所有可能的码字,并对码字进行特定的处理,包括二进制累加求和。最后,通过Java程序对处理后的码字进行二进制求和并进行SHA256加密,得出最终的flag。
摘要由CSDN通过智能技术生成

附件图片为Tanner图
在这里插入图片描述
可还原校验矩阵

c0c1c2c3c4c5c6c7c8c9
1111000000f0
1000111000f1
0100100110f2
0010010101f3
0001001011f4

根据校验矩阵,可以用脚本还原码字

'''
Author: Jack Jparrow
Date: 2022-02-27 12:01:40
LastEditTime: 2022-02-27 12:25:23
LastEditors: Jack Jparrow
Description: 根据校验矩阵求码字
'''
import numpy as np
N = 10
K = 5
b = []
H = np.array([[ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
            [ 1, 0, 0, 0, 1, 1, 1, 0, 0, 0],
            [ 0, 1, 0, 0, 1, 0, 0, 1, 1, 0],
            [ 0, 0, 1, 0, 0, 1, 0, 1, 0, 1],
            [ 0, 0, 0, 1, 0, 0, 1, 0, 1, 1]])
for i in range(2**N):
    a = format(i, 'b')
    b.append("{:0>10s}".format(a))

v = np.zeros((2**N, N))
for i in range(2**N):
    v[i] = b[i]
    for j in range(N):
        v[i][j] = b[i][j] # v是0000000~1111111

w = np.zeros((1, N - K))
for o in range(2**N):
    if np.all(np.dot(v[o], H.T) % 2 == w):
        print(v[o])

结果共有64行
在这里插入图片描述
010editor打开图片,在图片最后发现hint:
在这里插入图片描述
对码字稍加处理,只按行留下二进制数值,进行二进制累加求和

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

/**
 * @Author: Jack Jparrow
 * @Date: 2022-02-27 14:14:12
 * @LastEditTime: 2022-03-04 14:55:39
 * @LastEditors: Jack Jparrow
 * @Description: 读文件,求和
 */
public class Tanner {
    public static void main(String[] args) {
        int sum=0;// 和

        File myFile = new File("D:\\Desktop\\res.txt");
        try {
            InputStreamReader Reader = new InputStreamReader(new FileInputStream(myFile), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(Reader);

            String lineTxt = null;

            while ((lineTxt = bufferedReader.readLine()) != null) {

                sum += Integer.parseInt(lineTxt, 2);// 求和
                
                Reader.close();
            }

            System.out.println(Integer.toBinaryString(sum));// 输出结果的二进制形式

        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

将结果进行sha256加密,加上SUSCTF{}即为flag
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Captain杰派罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值