标签:26 loading invert base64 b64encode BUUCTF flag 40T 97
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
标签:26,loading,invert,base64,b64encode,BUUCTF,flag,40T,97 来源: https://blog.csdn.net/weixin_51633776/article/details/111695328
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。