NSS-DAY2

Crypto

[HNCTF 2022 Week1]A dictator

题目:

from random import randint
from secret import flag

offset = randint(1,100) % 26
# print(offset)

assert flag.startswith('NSSCTF{')
assert all([ord(c) not in range(ord('A'),ord('Z')) for c in flag[7:-1]])

for char in flag[7:-1]:
    if ord('a') <= ord(char) <= ord('z'):
        index = ord(char)-ord('a')
        new_char = chr((index+offset)%26 + ord('a'))
        print(new_char,end='')
    else:
        print(char,end='')

# lzw_uswksj_uahzwj_ak_gfw_gx_lzw_egkl_tskau_udskkausd_uahzwjk

对字母进行循环偏移,即凯撒加密
在这里插入图片描述

[SWPUCTF 2022 新生赛]小明文

题目task.py

from gmpy2 import invert
from Crypto.Util.number import getPrime, bytes_to_long
from flag import getflag

e = 3
p = getPrime(1024)
q = getPrime(1024)
n = p * q
phiN = (p - 1) * (q - 1)
d = invert(e, phiN)
m = bytes_to_long(getflag().encode())
c = pow(m, e, n)
print("c=" + str(c))
#c=128198926274489803523728445192921664
#flag=NSSCTF{c}

e=3,则有c+kn=m^3
由于只知道c,不知道n,尝试直接开三次方

c=128198926274489803523728445192921664
e = 3
k=0
while True:
    if gmpy2.iroot(c+k,e)[1]:
        m = gmpy2.iroot(c+k,e)[0]
        print(long_to_bytes(m))
        break
    k+=1
#b'ufind'

[HNCTF 2022 Week1]XXXOOORRR

题目:

from flag import flag
from Crypto.Util.number import *
import os

randBytes = [bytes_to_long(os.urandom(64)) for _ in range(3)]
m = bytes_to_long(flag)

print(f'a = {randBytes[0]}')
print(f'b = {randBytes[0] ^ randBytes[1]}')
print(f'c = {randBytes[1] ^ randBytes[2]}')
print(f'd = {m ^ randBytes[0] ^ randBytes[1] ^ randBytes[2]}')

'''
a = 1215421974111272707828609697064234072332368362928440865251897449605952163161176359366553487776268706107760670434157083936287598207881176904763353849369234
b = 10533604054267448009117468094542127075826310122733511023911022436253583775790861879410728001403728088545946257902341417532648419689212361977221573357292618
c = 6401236597601556248960570084212025183497657335932789785351897915858852832577623776212842429736547820800219382515052263929074210010546149322465536545021479
d = 5711309307698496426409561761492698639489294806611133698231840146911562848869711567477706456972659368849642409039245400981517493100724067475248620536111560
'''

根据 与自己本身异或为0,任何数与0异或都不变

a = 1215421974111272707828609697064234072332368362928440865251897449605952163161176359366553487776268706107760670434157083936287598207881176904763353849369234
b = 10533604054267448009117468094542127075826310122733511023911022436253583775790861879410728001403728088545946257902341417532648419689212361977221573357292618
c = 6401236597601556248960570084212025183497657335932789785351897915858852832577623776212842429736547820800219382515052263929074210010546149322465536545021479
d = 5711309307698496426409561761492698639489294806611133698231840146911562848869711567477706456972659368849642409039245400981517493100724067475248620536111560

r0 = a
r1 = a^b
m = d^a^c
print(long_to_bytes(m))
#b'NSSCTF{XOR_ha5_many_propertie5_and_thi5_i5_ju5t_one_of_them}'

[FSCTF 2023]兔帽的奇妙冒险

题目描述

有一只名叫贝斯64先生的兔子。它戴着一顶古老的兔帽子,帽子上绣着奇异的符文,传说这是一种能与神秘力量连接的魔法帽子。
OFR3c05RTEFKM2Q3QkxqRGlTbWthWExxSXhrZFo3SU5DVWRkOTVFQ2JUSE1VcXpRQk9hc3hqMzRrbHRJMD0=

先base64解码
在这里插入图片描述根据题目的兔子 可以推测是Rabbit编码
加上Rabbit的固定头,进行解码
在这里插入图片描述

[HUBUCTF 2022 新生赛]baby_encrypt

题目描述

加法?一眼破解!

baby_encrypt.txt:
781612443113954655886887407898899451044114412011257135914071455155316031651170318041861191719652013207021272183228423832485254125932643269827992924

解密:

  • 提示的加法,我们已知flag的开头是NSSCTF
s='NSSCTF{'
for i in s:
    print(ord(i),end=' ')
#78 83 83 67 84 70 123
  • 解题思路:分割前缀和+逐项相减取ASCLL码
    参考WP代码
#1.分割数据
str = "1612443113954655886887407898899451044114412011257135914071455155316031651170318041861191719652013207021272183228423832485254125932643269827992924"
ls = [0, 78]  # 前补0方便加密,把第一个78加进来方便分割
s = ""
for ch in str:
    s += ch
    if int(s) > ls[-1]:  # 因为是前缀和,取第一个比前一个大的数即可
        ls.append(int(s))
        s = ""
# print(ls)
#2.还原数据
flag = ""
for i in range(len(ls) - 1):
    flag += chr(ls[i + 1] - ls[i])
print(flag)
#NSSCTF{d41d8cd98f00b204e9800998ecf8427e}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值