0%

BUUCTF 每日打卡 2021-3-28

BUUCTF 每日打卡 2021-3-28

引言

开学半个月了,原本定的每日一题计划至今还没有实施(咕咕咕) 新学期首次CTF社团培训,让我们按方向分组每周做题发到博客上 (然而搞crypto的好像只有我一个😂) 想起寒假的cryptohack任务还有一大部分没搞,就突然感觉很无力很挫败 然后决定转战BUUOJ 希望这个系列能一直做下去 也当是写日记了

Rabbit

Rabbit, Tank, Best Match 不好意思,搞错了😂 题目就是一串加密字符:U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI 然后搜一下Rabbit加密 解密网站:http://www.jsons.cn/rabbitencrypt/解密网站:http://www.jsons.cn/rabbitencrypt/ 当然,解出了题目是不够的 一个关于Rabbit加密的文档:https://www.ietf.org/rfc/rfc4503.txt Rabbit流密码(Rabbit Stream Cipher)简介: Rabbit流密码是由Cryptico公司(http://www.cryptico.com)设计的, Rabbit输入128bit的密钥和64bit的IV初始向量,每次迭代后从513bit内部状态中生成128bit的伪随机序列。最大加密消息长度为 \(2^{64}\)​ bytes,即16TB,若消息超过该长度,则需要更换密钥对剩下的消息进行处理。 那么,什么是IV初始向量呢? 在密码学的领域里,初始向量(英语:initialization vector,缩写为IV),或译初向量,又称初始变量(starting variable,缩写为SV),是一个固定长度的输入值。一般的使用上会要求它是随机数或拟随机数(pseudorandom)。使用随机数产生的初始向量才能达到语义安全(消息验证码也可能用到初始向量),并让攻击者难以对原文一致且使用同一把密钥生成的密文进行破解。(摘自wiki)

篱笆墙的影子

在这里插入图片描述 老谜语人了 一看题目就知道这是个栅栏密码 密文:felhaagv{ewtehtehfilnakgw}

1
2
3
4
5
6
7
8
m = 'felhaagv{ewtehtehfilnakgw}'
c = ''

for i in range(0, len(m), 2):
c += m[i]
for i in range(1, len(m), 2):
c += m[i]
print(c)

RSA

题目:在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17 求解出d作为flag提交

RSA加密原理: 选择两个大素数p和q,计算出模数N = p * q 计算φ = (p−1) * (q−1) 即N的欧拉函数,然后选择一个e (1<e<φ),且e和φ互质 取e的模反数为d,计算方法: e * d ≡ 1 (mod φ) 对明文m进行加密:c = pow(m, e, N),得到的c即为密文 对密文c进行解密,m = pow(c, d, N),得到的m即为明文

1
2
3
4
5
6
7
8
import gmpy2

p = 473398607161
q = 4511491
e = 17

phi = (p-1) * (q-1)
print('d = ' + str(gmpy2.invert(e, phi)))

结语

炸鱼一时爽,一直炸鱼一直爽(doge) 希望能坚持

欢迎关注我的其它发布渠道

-------- 本文结束 感谢阅读 --------