n1ctf(部分复现)

本文记录了作者在n1ctf比赛中的复现过程,涉及Crypto领域的多个挑战,如VSS、Easy_RSA。在VSS中,探讨了伪随机函数和视觉密码方案,包括Mersenne Twister算法。在Easy_RSA中,分析了RSA的弱点并接触到格密码学中的LLL算法。虽然作者表示题目具有挑战性,但通过复现学习到了很多。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Before

这半个月一连串的比赛,淦,爷要脑溢血了(两眼一黑,直接去世)

导致我现在才复现N1CTF

菜狗表示签到和签退好评,淦

复现的时候学到好多,有些东西要找个时间梳理一下了,这里仅仅放一下我的一些理解和想法好了

继续肝ctf!

淦啊!这已经不是wp了,是我复现题目,阿布,是学习过程记录了,菜啊~

img
好难啊~

Crypto

VSS

源码
#!/usr/bin/python3
import qrcode  # https://github.com/lincolnloop/python-qrcode
import random
import os
from PIL import Image
from flag import FLAG




def vss22_gen(img):
    m, n = img.size
    share1, share2 = Image.new("L", (2*m, 2*n)), Image.new("L", (2*m, 2*n))
    image_data = img.getdata()
    flipped_coins = [int(bit) for bit in bin(random.getrandbits(m*n))[2:].zfill(m*n)]
    for idx, pixel in enumerate(image_data):
        i, j = idx//n, idx % n
        color0 = 0 if flipped_coins[idx] else 255
        color1 = 255 if flipped_coins[idx] else 0
        if pixel:
            share1.putpixel((2*j, 2*i), color0)
            share1.putpixel((2*j, 2*i+1), color0)
            share1.putpixel((2*j+1, 2*i), color1)
            share1.putpixel((2*j+1, 2*i+1), color1)


            share2.putpixel((2*j, 2*i), color0)
            share2.putpixel((2*j, 2*i+1), color0)
            share2.putpixel((2*j+1, 2*i), color1)
            share2.putpixel((2*j+1, 2*i+1), color1)
        else:
            share1.putpixel((2*j, 2*i), color0)
            share1.putpixel((2*j, 2*i+1), color0)
            share1.putpixel((2*j+1, 2*i), color1)
            share1.putpixel((2*j+1, 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值