affine
y = 17x-8 flag{szzyfimhyzd}
答案格式:flag{*}
来源:第七届山东省大学生网络安全技能大赛
本题要点:仿射加密
看到这道题目有点懵.....题目是affine.....查看中文释义是仿射。
查阅资料,什么是仿射密码呢?
仿射加密法
在仿射加密法中,字母表的字母被赋予一个数字,例如 a=0,b=1,c=2…z=25 。仿射加密法的密钥为0-25直接的数字对。
仿射加密法与单码加密法没什么不同,因为明文的每个字母分别只映射到一个密文字母。
仿射密码的加密算法就是一个线性变换,即对任意的明文字符x,对应的密文字符为![]()
,其中,a,b∈![]()
,且要求gcd(a,26)=1,函数e(x)称为仿射加密函数。
注意:
注1. 仿射加密函数要求gcd(a,26)=1,即要求a和26互素,否则![]()
就不是一个单射函数。
注2. 从仿射加密函数的表达式易知,当a=1,b=3时,这种仿射密码就是著名的凯撒密码。
注3. 在求解仿射解密函数时,需要求a在![]()
上的乘法逆元![]()
这可由扩展欧几里得算法求解,下表列出了在![]()
上所有与26互素元素的乘法逆元:
举个栗子~
假设e(x)为密文,x为明文。
设仿射加密函数是![]()
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAdCAYAAAA+TCdyAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQ3SURBVHhe7ZbdbSpBDIV54jGvFJAKUkJKSA2pgSpSBGWkitSRMog+tEdyjOePWXKXK3/SSszimfGxzwzszkmyYdKgyaZJgyabJg2abJo0aLJp0qDJplnFoF9fX8unNiOxScz/VsOanmmDvr+/n7+/v5dRm+PxmCadYLTea3I6nc6fn5/LaD1qnpgyKMm+vb0to36en5+XT/eD3F5eXpZRTE/MX/Px8VE0wa31noUDwb673e5iJgs5HQ6Hy3dPT0+X/FtEGkuemDIoi5aKWYN5nMZ7wEmkmOxB0SJ6Yv4absZWXW6t91pQK7s/xpUpyVtGLeVY01h6f3N3SG6/3y+jMTiFr6+vy+g+ILZlvp6Yv4BbvFWPmXqvAabztaKP3rDERLd8S2PJEzd3hwVx/S0g6t7F/pcG5Ubp/SkmjpunxUy91wBN3JYWDOkhxhutR2PJE8XuyNFMiq5evoscz0mxQhDGGvZPsE5aJBCIbT0t1jBoj5aIXoOyDvuXfhItpXrrZxOopzcDfUSD34N5rMd3fI5AB2sTQ57R/h7qw56iV2PJE2F3EElyQIJRYrz3TSAxmq4k+WzXstSSxhisX3tazBp0RIun16DUlfWJx1R8LpkAzX5NjKVaYQTGxOhQMSZ3X2vmaKwaeGN4DezBWjVYEw2WEY2RJ666Q4AMQNLR6QM2K508EmCN0vdAMhTnXtTMJ3pierR4eg2qhqm+zCMfDOQp1Zv8ePQdJmK+xqxtNbKHXV83l+2x+m7xMRHUyfd0RCPv/fyr7rAJxUUoIv3JErWm+aJE1ASzNsJqT4u1DNqjhduLJtiHOXbsCw+8R6sFs0X7leqNkayZaDzrqm/MsXtQO3sTyqC2z9bwoFu4BvHRoRzRyDvviasoglpXOejkRqjxJQMC39f+y1Gw2tNiLYP2aPGM3KC+ebphPKV6E8scgVmtuextCl4Lc/1tiakUQ63J08dYiPU6xIhG3nlP/IrSH9qacYQ/mQJBNIfClJqEoCjBNVnDoD1aInoNiuF847kcMIgnqjd1tLHkix57gK3Z1F+NAW3RjSoP6GAQF0E8JrR7Wno1ljzx642SU8JMsqfPggC7CWMajhDWURI0y6/BdyXBoBNbe1rolJYKB6WYES0RvQaNDIP2aK6vN3jTsq+tjdYnf/QAY2nge296OwdzKYZaRNrZj3zZm4d5xDMPtF5LY8kTV5ZlIguyCRvWIDklQvJ2DIwR6SGR1tozkAtFQAd7Id5TixnREoG2HoMCjaPWuqVq83xOzLF1JG8ewdrMkTmBeIxe24s55KSDy+coljWonx7WJSdrRujRyPvIE/XfwAYsaAvSC8ZIxrm13o9AyRNTBoXeW0VQZHuikzFG6/0I1DwxbVB+BvyVXiPNOcdovR+BmiemDZok9yQNmmyaNGiyadKgyaZJgyabJg2abJjz+Qds8QUPt4pMeQAAAABJRU5ErkJggg==)
由上表知:![]()
所以相应的仿射解密函数是![]()
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALUAAAAaCAYAAADxGR2SAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAShSURBVHhe7ZfdUeQwEIT3aR95JQAiIARCIAZi2CgIgjCIgjgIY6mPcl/Nzc2M5B9ufT59Va5ar2VperqlhdN1MDgYI9SDwzFCPTgcI9SDwzFCPTgcI9QJHx8f06c+5o7/2+y9vrlUeg4d6qVGvry8XD8/P6e7Pi6Xy02C07PmEj1b8fb2dn1/f5/utqPq9+5CTQMeHx+nuz9ByNPT0/fFuNfX1+nJ7yw1kvWfn5+nu3k8PDxMn34O9NqQtDbTGj1roPesezqdvmu0UNP9/f33s7u7u9RDi9cNWb93E2qMoQkUitgIGnU+n3+FVfecBpa1wfTN64V3fS1bwSbN5s/MhTV6tgAv7fp4piCjReHOamzpjr7f3UlNkVmodTpbCC+NsSw1UptkKZxI1Lg1aK7mzcxdq2cteOC9pEc+5IyJDqGW7qzf/1SoCa8XgTA7fo2RzEVAloJZW4co2rSezNy1etbCacypbMEfD2N8/T26s343Q81usYVRKBNlf8fxfeuqqEKNQV6oQq1mtYxUANDgTze+j8IBPX3QqRMZtwTmZr7Wr05mbqVHP+tAvT5E9Am9fm3eY06e8dlDX5iX59SerW+hdtYTvbqzfpehZiGM16J8RjyFZ2A+oqqrogo1NfBMzUQMRtjxlZG2durw4/iOMZ45fegxoxfqY03WQSefI22ZuZke+iefCBD3jNOm5V69tlp4R/fyya5JnXY95meeCuZDl6VXN0T9bp7UwIQUGO3MralCDTSN5xJKXfYEzYxEOM8AI6JTiAZWGnv6QG1o2AIZqjoxmfkJlycyt9KDFi49J3zMq3vmsj6wtl1XG0lrqqeWqCYP/fT9mqvbv98Vai+wgiIpqroqWqH2IN4ax/yRkQo75vHcn2rQCmxPH3jujeQ09D3wV2Q+2qjJQhCjGvjOm1vpIYA2hASG9dQX3rNrU6M9dRVqjbcbBHTSVzA+OoDm6va960qPghY1PgKh1VUxJ9Q0xRoBmZHM2fop1OmV0dMHntu/s9dAkLy5OrU8UV2VHsYzlyDgtm/21AY/P+/aTYEPeo4f1O5PbgtjvTYxV7fvdzM9FMhuQmS0q7amN9SMs40UkZH6x6MVNkzMGt3TB2rpqb0XdPhgsDHR7Yn0ZXqo086BNt63h4Ptrfpne00fdEjofa0vDxgTwXiCa9ez9OrO+p06QIEEh8JYXJOyY6KTUGiHVleFdmQmmO8JFetEIY2M5B3mlAk0I9LAfL5xc/rAs8zIJbC2DxO6/abKzI30gO+RP3W1LnrQDtxLL8/t+3Y8gdRzehH1mbXQwLpcvMd43gPN19Kd9TsNNcWwuBYC7in6p2BNikcQxVK0B2FqdAT1RkbyHvPSPBqZ4TXP6QM1V3MvAWOpWSefNxYyc8HXDsxl60SjDR9r8p7tM+Ppa1YD46lThxGfo3G8jw+6mJN6bIChRzffR/3e7rdyR0RG9kKTrMFzYEPegsxcWKNn72T9PmSo1xoZncItWLP6BflJWptpiZ69U/X7kKGGNUbyE+p/DlvcKtA9m2mJnr1TaT5sqI9oZMStNtOeOWyoB/8vI9SDwzFCPTgY1+sXquT5ohGE9hAAAAAASUVORK5CYII=)
若加密明文是 sorcery ,首先把明文每个字母转换为数字 18,14,17,2,4,17,24 。然后对明文进行加密,这里以第一个字母s为例:
e(x)=(11*18+6)mod 26
e(x)=204 mod 26
e(x)=22
对照下表:
![](https://img2018.cnblogs.com/i-beta/1645975/202001/1645975-20200109174909993-1542108432.png)
依次解密,最后得密文为 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