affine
题目:y = 17x-8 flag{szzyfimhyzd}
答案格式:flag{*}
本题要点:仿射加密![](https://img-blog.csdnimg.cn/20210615163713739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1MTg1MTYw,size_16,color_FFFFFF,t_70)
-
- affine加密,仿射加密,听着挺高级,其实也就是明文和密文之间有一个一次函数变化,y=kx+b,只不过为了让y能转换成对应的密文,要对kx+b取余。
- 一般常用的字符集就是a-z,分别对应0-26。
- 并且,一次函数能用于做密码是因为他有个特性,就是每一个x对应唯一的y,所以为了保证取余之后也能保持这种特性,就要求k与字符集的大小(这里是26)互质。
- 像这种知道加密函数解密也有两种方法,一种是用解密函数,一种是暴力破解,哪种都可以。
暴力破解:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: moddemod
# ide: PyCharm
# y = 17x-8 flag{szzyfimhyzd}
import gmpy2
s = 'szzyfimhyzd'
r = gmpy2.invert(17, 26)
s1 = ''
for i in s:
s1 += chr(r * (ord(i) - ord('a') + 8) % 26 + ord('a'))
print('flag{' + s1 + '}')
最终得 到flag