目录
BUUCTF CRYPTO
(一)MD5
题目地址
解题思路
- 下载解压得到MD5码
e00cf25ad42683b3df678c61f42c6bda - 用网站https://www.cmd5.com/解密得到flag
工具:https://www.cmd5.com/
(二)一眼就解密
题目地址
解题思路
- 给出ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=,像base64的密文,用base64解密,得到flag
工具:https://base64.us/
(三)Url编码
题目地址
解题思路
- 对解压后的密文用url解码得到flag
工具:http://www.jsons.cn/urlencode/
(四)看我回旋踢
题目地址
解题思路
- 解压后拿到synt{5pq1004q-86n5-46q8-o720-oro5on0417r1},像Caesar加密,s距离f有13位,用13位的Caesar解密得到flag
工具:http://www.atoolbox.net/Tool.php?Id=778
(五)摩丝
题目地址
解题思路
- 用摩斯密码对解压后的密文翻译,得到flag(需要转成大写,摩斯密码只使用大写字母)
工具:http://msmm.qianwanku.com/
(六)password
题目地址
解题思路
- 根据提示密码长度为10,使用名字首字母加8位生日尝试,得到flag
(七)变异凯撒
题目地址
解题思路
- 解压得到密文afZ_r9VYfScOeO_UL^RWUc,a和f相差5,f和l相差6,Z和a相差7,找到规律,用以下程序解码,得到flag
#include <stdio.h>
#include <string.h>
int main(){
char str[] = "afZ_r9VYfScOeO_UL^RWUc";
int k = 5;
for(int i = 0; i < strlen(str); i++){
str[i] += k;
k++;
printf("%c",str[i]);
}
return 0;
}
(八)Quoted-printable
题目地址
解题思路
- 根据提示用Quoted-printable解码得到flag
工具:http://web.chacuo.net/charsetquotedprintable/
(九)Rabbit
题目地址
解题思路
- 下载解压得到密文,根据题目提示猜测是Rabbit密文
U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI - 用网站https://www.sojson.com/encrypt_rabbit.html解密得到flag
工具:https://www.sojson.com/encrypt_rabbit.html
(十)篱笆墙的影子
题目地址
解题思路
- 下载解压得到密文,根据题目提示猜测是栅栏密文
felhaagv{ewtehtehfilnakgw} - 用网站https://ctf.bugku.com/tool/railfence解密得到flag
工具:https://ctf.bugku.com/tool/railfence
(十一)RSA
题目地址
解题思路
- 下载解压得到p,q,e, 通过p,q可以计算φ(n)
- 用gmpy2库计算逆元得到d
# gmpy2是Python的一个扩展模块,提供了高精度计算、大整数计算、素数检测、素性检测、椭圆曲线加密、RSA等功能
import gmpy2
p = 473398607161
q = 4511491
e = 17
d = gmpy2.invert(e,(p-1)*(q-1))
print(d)
工具:gmpy2库
(十二)丢失的MD5
题目地址
解题思路
- 下载解压得到md5.py
- 运行得到报错如下
Traceback (most recent call last):
File "C:\Users\ABC\Downloads\17292421-ac35-4c86-921d-249450f3298b\丢失的MD5\md5.py", line 6, in <module>
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
TypeError: Strings must be encoded before hashing
- 根据提示对字符串加上encode如下
#原代码
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
#修正后代码
m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode())
- 运行后得到flag:e9032994dabac08080091151380478a2
(十三)Alice与Bob
题目地址
解题思路
- 通过如下程序把98554799767分解成两个素数乘数101999和966233
def factorize(n):
factors = []
i = 2
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors
def find_prime_factors(n):
factors = factorize(n)
if len(factors) == 2:
return factors
else:
return "Unable to find two prime factors."
# 将要分解的整数
number = 98554799767
# 调用函数进行分解
prime_factors = find_prime_factors(number)
# 输出结果
if isinstance(prime_factors, list):
print(f"The prime factors of {number} are {prime_factors[0]} and {prime_factors[1]}.")
else:
print(prime_factors)
- 用下方代码对101999966233进行进一步的md5的32位小写哈希,得到flag
import hashlib
def calculate_md5_hash(number1, number2):
number_str = str(number1) + str(number2)
md5_hash = hashlib.md5(number_str.encode()).hexdigest()
return md5_hash[:32].lower()
# 计算MD5哈希值
md5_hash = calculate_md5_hash(prime_factors[0],prime_factors[1])
# 输出结果
print(f"The MD5 hash of {str(prime_factors[0])+str(prime_factors[1])} is: {md5_hash}")
- 程序输出如下
(十四)大帝的密码武器
题目地址
解题思路
- 根据名字提示,把文件改成zip格式后解压得到题目
公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。
2. 由罗马三巨头且用名字命名加密方法猜测是凯撒加密,从0开始尝试,试到13位解密成功得到明文单词security
3. 用13位凯撒加密明文ComeChina得到密文,即为flag
(十五)rsarsa
题目地址
解题思路
- 下载解压得到p,q,e,c 通过p,q可以计算φ(n)
- 用gmpy2库计算逆元得到d
- 计算c的d次幂的结果模n得到明文
# gmpy2是Python的一个扩展模块,提供了高精度计算、大整数计算、素数检测、素性检测、椭圆曲线加密、RSA等功能
import gmpy2
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
n = p * q
d = gmpy2.invert(e, (q-1)*(p-1))
m = pow(c,d,n)
print(m)
工具:gmpy2库
(十六)Windows系统密码
题目地址
解题思路
- 下载解压得到pass.hash文件,用记事本打开发现是windows系统的用户信息,根据文件名提示猜测是MD5加密
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56::: - 用网站https://www.cmd5.com/的NTLM对以上八个加密字段逐一尝试解密得到flag
工具:https://www.cmd5.com/
(十七)信息化时代的步伐
题目地址
解题思路
- 有题目中的清朝密码提示,猜测是和中文电码表有关,使用电码中文转换网站对密文进行尝试转换,成功拿到flag
工具:https://dianma.bmcx.com/
(十八)凯撒?替换?呵呵!
题目地址
解题思路
- 凯撒解密后得到FMAC{VNUVZQZNZQPKXQBIHRTHXRYBZQPKQVAMDAYVHAVYWNVZMQSHABQHXHPFXASH}
- 有题目中的替换猜测可以用单表暴力破解,用破解后的第一个字符串尝试,发现是flag(需要把空格去掉)