CTF解题

1:爬虫协议 

1.1 题目描述: 

小兰同学在开发网站时了解到一个爬虫协议,该协议指网站可建立一个特别的txt文件来告诉搜索引擎哪些页面可以抓取,哪些不可以抓取,而搜索引擎则通过读取该txt文件来识别这个页面是否允许被抓取,爬虫协议并不是一个规范而只是约定俗成的,所以不能保证网站的隐私。

1.2 解题步骤:

(1)访问robots.txt文件

(2)访问0f3f8d7ec56c0c50f9d73724902648a5

(3)访问0f3f8d7ec56c0c50f9d73724902648a5/da87bd9aca438bf00a80d12c8912f3a0

(4)得到答案flag{42d5c8f1-259d-462c-a8bd-4bc1f50d354d}

2:AES加密

2.1 AES加密原理

  1. 算法概述:
    • AES是一种对称加密算法,意味着它使用相同的密钥进行加密和解密操作。
    • AES算法基于分组密码体制,将明文数据按照固定大小(通常是128位,即16字节)进行分组,并对每一分组进行加密。
  2. 密钥长度
    • AES支持三种不同的密钥长度:128位、192位和256位。
    • 不同长度的密钥会经过不同轮数的加密操作。具体来说,128位密钥需要10轮,192位密钥需要12轮,256位密钥需要14轮。
  3. 加密流程
    • 每一轮加密操作都包含四个主要步骤:SubBytes(字节替换)、ShiftRows(行移位)、MixColumns(列混淆)和AddRoundKey(轮密钥加)。
    • SubBytes:通过查表的方式(使用S-box)将输入的16个字节替换成新的16个字节。
    • ShiftRows:将明文分组分为四行,并循环左移每一行。具体来说,第一行不变,第二行左移一个字节,第三行左移两个字节,第四行左移三个字节。
    • MixColumns:对每一列进行混淆操作,使用固定的矩阵进行变换,从而改变明文的结构。
    • AddRoundKey:将扩展后的轮密钥与明文分组进行异或运算,得到加密后的中间结果。
  4. 密钥扩展
    • AES算法中,初始密钥会被扩展成多个轮密钥,用于与明文分组一起进行加密操作。
    • 密钥扩展过程中,根据所选的密钥长度(128位、192位或256位),会经过不同轮数的扩展操作。
  5. 填充
    • 如果明文数据的长度不是16字节的整数倍,AES算法会进行填充操作,使其达到16字节的整数倍。常见的填充方式有PKCS5Padding和ZeroPadding。
  6. 工作模式
    • AES算法支持多种工作模式,如ECB(电子密码本)、CBC(密码分组链接)、CFB(密文反馈)、OFB(输出反馈)和CTR(计数器)等。这些模式提供了不同的安全性和性能特性,可以根据具体需求选择。

2.2 解题步骤:

(1)

key是gamelab@gamelab@,IV是gamelab@gamelab@,Mode是CBC模式,输出为Hex十六进制

4da72144967f1c25e6273950bf29342aae635e2396ae17c80b1bff68d90f16679bb45c15852e0ce88d4864d93e9e3be2

(2)打开解密工具cc(CyberChef),输入key,IV,Mode以及密文,点击decode解密得到flag{6500e76e-15fb-42e8-8f29-a309ab73ba38}

3.RSA加密

3.1 题目描述:

题目文件是task.py

from Crypto.Util.number import *
from gmpy2 import *
flag = b'xxx'
m =  bytes_to_long(flag)
p = getPrime(512)
q = next_prime(p)
e = 65537
n = p * q
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
d1 = d % q
d2 = d % p
c = pow(m, e, n)
 
print(n)
print(d1)
print(d2)
print(c)

3.2 解题步骤:

(1)

RSA加密算法的原理基于数论中的大数因子分解困难性。以下是RSA算法的基本原理概述:

  1. 密钥生成
    • 选择两个不同的大素数p和q。
    • 计算n = p × q,其中n是公钥和私钥都需要的部分。
    • 计算φ(n) = (p-1) × (q-1),其中φ(n)是欧拉函数,表示小于n且与n互质的正整数的个数。
    • 选择一个整数e,满足1 < e < φ(n)且e与φ(n)互质。e作为公钥的一部分。
    • 使用扩展欧几里得算法计算d,满足d × e ≡ 1 (mod φ(n))。d是私钥的一部分。
  2. 公钥与私钥
    • 公钥:(n, e)
    • 私钥:(n, d)
  3. 加密过程
    • 假设需要加密的明文为M(M必须是一个小于n的整数,如果M不是整数或大于n,则需要进行额外的处理,例如将M转换为一个整数,或者使用填充方案)。
    • 加密运算为:C = M^e mod n,其中C是密文。
  4. 解密过程
    • 使用私钥进行解密,解密运算为:M = C^d mod n,其中M是解密后的明文。
  5. 安全性
    • RSA算法的安全性基于大数因子分解的困难性。给定公钥(n, e),没有已知的高效算法可以在合理的时间内计算出私钥d,除非能够分解n的因子p和q。
    • 在实际应用中,为了增强安全性,p和q通常选择非常大的素数,并且n的位数(即密钥长度)也相应增加。常见的密钥长度包括1024位、2048位和4096位等。

(2)


import gmpy2
import sympy
 
# import Cryptodome.Util.number
from Crypto.Util.number import *
import binascii
n=94581028682900113123648734937784634645486813867065294159875516514520556881461611966096883566806571691879115766917833117123695776131443081658364855087575006641022211136751071900710589699171982563753011439999297865781908255529833932820965169382130385236359802696280004495552191520878864368741633686036192501791
x=gmpy2.iroot(n,2)[0]# 取第0个元素,也就是第一个元素
 
p=sympy.nextprime(x)
q=n//p
e=65537
d=gmpy2.invert(e,(p-1)*(q-1))
print(p)
print(q)
print(d)
c=36423517465893675519815622861961872192784685202298519340922692662559402449554596309518386263035128551037586034375613936036935256444185038640625700728791201299960866688949056632874866621825012134973285965672502404517179243752689740766636653543223559495428281042737266438408338914031484466542505299050233075829
m=pow(c,d,n)
print(m)
print(long_to_bytes(m))

(3)得到答案flag{5f00e1b9-2933-42ad-b4e1-069f6aa98e9a}:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值