Bugku-CTF加密篇之affine(y = 17x-8 flag{szzyfimhyzd})
affine
y = 17x-8 flag{szzyfimhyzd}
答案格式:flag{*}
来源:第七届山东省大学生网络安全技能大赛
本题要点:仿射加密
看到这道题目有点懵.....题目是affine.....查看中文释义是仿射。
查阅资料,什么是仿射密码呢?
 仿射加密法 
在仿射加密法中,字母表的字母被赋予一个数字,例如 a=0,b=1,c=2…z=25 。仿射加密法的密钥为0-25直接的数字对。
仿射加密法与单码加密法没什么不同,因为明文的每个字母分别只映射到一个密文字母。
仿射密码的加密算法就是一个线性变换,即对任意的明文字符x,对应的密文字符为![]()
 ,其中,a,b∈
 ,其中,a,b∈![]()
 ,且要求gcd(a,26)=1,函数e(x)称为仿射加密函数。
,且要求gcd(a,26)=1,函数e(x)称为仿射加密函数。
注意:
注1. 仿射加密函数要求gcd(a,26)=1,即要求a和26互素,否则![]()
 就不是一个单射函数。
就不是一个单射函数。
注2. 从仿射加密函数的表达式易知,当a=1,b=3时,这种仿射密码就是著名的凯撒密码。
注3. 在求解仿射解密函数时,需要求a在![]()
 上的乘法逆元
上的乘法逆元![]()
 这可由扩展欧几里得算法求解,下表列出了在
这可由扩展欧几里得算法求解,下表列出了在![]()
 上所有与26互素元素的乘法逆元:
上所有与26互素元素的乘法逆元:
 举个栗子~ 
假设e(x)为密文,x为明文。
设仿射加密函数是![]()

由上表知:![]()
 所以相应的仿射解密函数是
所以相应的仿射解密函数是![]()

若加密明文是  sorcery  ,首先把明文每个字母转换为数字 18,14,17,2,4,17,24 。然后对明文进行加密,这里以第一个字母s为例:
e(x)=(11*18+6)mod 26
e(x)=204 mod 26
e(x)=22 
对照下表:
 
 
依次解密,最后得密文为   welcylk 
那么,我们根据这个原理,写一个脚本解密一下~
(这里又要借用大佬的py脚本了~)
flag = "szzyfimhyzd" flaglist = [] for i in flag: flaglist.append(ord(i)-97) flags = "" for i in flaglist: for j in range(0,26): c = (17 * j - 8) % 26 if(c == i): flags += chr(j+97) print(flags)
得到结果~~
提交 flag{affineshift} 
参考资料:
https://baike.baidu.com/item/仿射加密法/1708885?fr=aladdin
https://blog.csdn.net/qq_42777804/article/details/91484576
---------------------  ┑( ̄Д  ̄)┍  -------------------------- 
作者:0yst3r[一只在安全领域努力奋斗的小菜鸡] 
来源:博客园[ https://www.cnblogs.com/0yst3r-2046/ ]   引用时请注明来源哦~  
(๑•̀ㅂ•́)و✧ヽ(✿゚▽゚)ノ(*^▽^*) φ(≧ω≦*)♪
如果本文对你有用,本人不胜欢喜。 
The world is your oyster.
 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号