21.[GKCTF2020]小学生的密码学
e(x)=11x+6(mod26)
密文:welcylk
(flag为base64形式)
- 这种形式的加密手法是仿射变换,其加解密分别如上
- 所以可以得到a=11,b=6,需要做的工作是根据密文c,密钥a/b求得明文m。这里a−1计算可以利用Python的gmpy2库中invert函数完成
- 注意仿射变换26个字母按数字0~25记,因此在需要将密文ASCII对应的数值减去97,解密完恢复成字母即加上97
- 此外,题目要求最后的flag为base64形式,因此还需借助Python的base64库中b64encode函数。需要注意的是在Python3中,字符都为unicode编码,而b64encode函数的参数为byte类型,所以必须先转码。
- 解题代码如下
from gmpy2 import invert from base64 import b64encode c = "welcylk" a = 11 b = 6 n = 26 in_a = invert(a, n) print(in_a) # in_a = 19 m = [] for i in c: modified_c = ord(i)-97 m.append((modified_c-b)*in_a % 26) flag = "" for mi in m: flag += chr(mi+97) print(b64encode(flag.encode()))
flag{c29yY2VyeQ==}
参考:https://www.cnblogs.com/vict0r/p/13791142.html
22.传统知识+古典密码
小明某一天收到一封密信,信中写了几个不同的年份
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”,请解出这段密文。
key值:CTF{XXX}
由表可知
题干中说信的背面还写有“+甲子”,于是我们可以把每个数加上60
得到88、90、83、68、77、70、76、90
对应ASCII表,得到XZSDMFLZ,由题目中“古典密码”,联想到栅栏密码和凯撒密码
先用栅栏
再用凯撒
历经n次摸索得出来的一个可疑的一串字母……
(感觉做这种题经验很重要,运气也是啊)
23.信息化时代的步伐
题目:606046152623600817831216121621196386
由提示“也许中国可以早早进入信息化时代,但是被清政府拒绝了。附件中是数十年后一位伟人说的话的密文。请翻译出明文(答案为一串中文!) ”,加上网络了解,这串数字是中文电码。(又一新类型密码get)
利用中文电码工具得到flag为:
flag{计算机要从娃娃抓起}
24.RSA1
题目:
p=8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q=12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp=6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq=783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c=24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
这一题比前面的RSA类型的要难了,不能一下子用工具得出结果
上网查了一下题解如下
import gmpy2
import libnum
def decrypt(dp,dq,p,q,c):
InvQ = gmpy2.invert(q, p)
mp = pow(c, dp, p)
mq = pow(c, dq, q)
m = (((mp-mq)*InvQ) % p)*q+mq
print (libnum.n2s(m))
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
decrypt(dp,dq,p,q,c)
得到
由p,q,dp,dq,c求明文的算法
代码如下:
import gmpy2 I = gmpy2.invert(q,p) mp = pow(c,dp,p) mq = pow(c,dq,q) #求幂取模运算 m = (((mp-mq)*I)%p)*q+mq #求明文公式 print(hex(m)) #转为十六进制
“一切以解题为目的的抄代码都是没有灵魂的,我们还是要从数学理论上去分析解决它,再去写代码”→来源:https://blog.csdn.net/MikeCoke/article/details/105959599
所以不能一味靠“借鉴”去做题了。还得花点时间去深入研究,不过估计得到寒假了
25.凯撒?替换?呵呵!
MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}
这个样子看起来是凯撒加密,按理说前面四个字母就是加密后的‘FLAG’,但后来发现不对劲……
是高级的凯撒加密,不是单纯的按字母顺序来位移,所以就要经过暴力破解出每一种可能的对应加密。
26.old-fashion
Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l
还是用上面那个爆破工具
27.权限获得第一步
Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::
有点似曾相识,跟十八题有点相似(“Windows系统密码”),直接md5解码
28.萌萌哒的八戒
看到图片上那行奇怪的字符,这应该就是“猪圈密码”了吧!