BUUCTF-Crypto1

探索古密码术:从古典加密到现代安全算法的解密之旅
文章讲述了如何通过古典密码技术如六十甲子、栅栏密码、凯撒密码以及现代加密方法如MD5和RSA,解析一系列复杂的加密案例,包括文件解密、密文分析和大整数运算,最终揭示隐藏的旗标(flag)。

传统知识+古典密码1

1.打开附件

是一个文本文档

2.六十甲子相关数表

用六十甲子相关数表

对照后得到28 30 23 08 17 10 16 30

'+甲子',一甲子是六十年,加上六十后得到 88 90 83 68 77 70 76 90

3.十进制转ASCII码

将十进制转ASCII码,得到一串字符串

在线网站:十进制到 Ascii 文本转换器 - bfotool

4.栅栏密码

用随波逐流工具进行栅栏密码解密

因数[2, 4]:
分为2栏时,解密结果为:XMZFSLDZ
分为4栏时,解密结果为:XSMLZDFZ

5.凯撒密码

用凯撒密码对两栏的字符分别解密

找到可以拼写的字母就是flag

6.得到flag

萌萌哒的八戒1

1.打开附件

一直小猪,图片下面是一串密文

2.猪圈密码

猪圈密码在线网站https://www.metools.info/code/c90.html?spm=a2c6h.12873639.article-detail.7.8ae851e6dOqNsA

进行猪圈密码解密

3.得到flag

大帝的密码武器1

1.打开附件

一个题目,一个密文

2.凯撒密码

根据题目提示猜测是凯撒密码,将FRPHEVGL用随波逐流工具,进行凯撒解密

根据题目提示发现偏移量是十三时单词是有意义的

3.密文解密

将密文用随波逐流中的凯撒密码解密,偏移量是十三时即为flag

4.得到flag

Alice与Bob1

1.素数分解

根据题目提示内容,用随波逐流工具对大整数进行分解

得到101999966233

2.MD5加密

根据题目对得到的数字进行MD5加密,得到32为的MD5值

MD5在线加密网站:MD5在线加密/解密/破解—MD5在线

3.得到flag

rsarsa1

1.打开附件

2.rar解密

#大佬的脚本

import gmpy2
e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p*q
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
 
d =gmpy2.invert(e,(p-1)*(q-1))
print(d)
M = pow(c,d,n)
print(M)

运行第一行是d的值,最后一行是flag

3.得到flag

buuctf平台的crypto题目中,变异凯撒密码的解题关键在于找出明文与密文之间的偏移规律。以“变异凯撒”这一题目为例,其加密密文为“afZ_r9VYfScOeO_UL^RWUc”,格式为“flag{ }”。 通过观察“afZ_”和“flag”对应字母的ASCII码值差异,可发现偏移规律:f - a = 102 - 97 = 5,l - f = 108 - 102 = 6,a - Z = 97 - 90 = 7,g - _ = 103 - 95 = 8,即偏移量从5开始依次加1,也就是每个字符的偏移量为n + 4(n为字符所在的位数) [^2][^3][^5]。 下面给出几种不同语言实现解密的代码示例: **C++代码**: ```cpp #include<iostream> #include<string> using namespace std; int main(){ char str1[23] = "afZ_r9VYfScOeO_UL^RWUc"; char str2[23] = {0}; int j,k; cout<<str1<<endl; for(j = 0; j < 23 - 1; j++){ k = j + 5; cout<<char(int(str1[j]) + k); } } ``` 这段C++代码通过遍历密文字符串,根据偏移规律计算出每个字符对应的明文字符并输出 [^1]。 **Python代码示例1**: ```python m = "afZ_r9VYfScOeO_UL^RWUc" a = 5 for i in range(0, len(m)): print(chr(ord(m[i]) + a), end='') a += 1 ``` 此Python代码同样是利用偏移量从5开始依次加1的规律,将密文解密为明文 [^2]。 **Python代码示例2**: ```python def caesar(text): for i in range(len(text)): y = 5 + i # 偏移规律 print("{}".format(chr(ord(text[i]) + y)), end='') caesar('afZ_r9VYfScOeO_UL^RWUc') # 输入要解密的文本 ``` 这段Python代码定义了一个名为`caesar`的函数,接收密文作为参数,根据偏移规律进行解密并输出结果 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin___ying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值