解题思路:仿射函数加解密方法,求逆元;
解题方法:

                1、仿射函数y=ax+b解密需求出a的逆元,a应满足gcd( a ,26)=1,a与_a(用这个代表逆元先)的关系为a*_a = 1%26,用代码实现则为:

def _a(n): #求n的逆元,n的范围:{1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25}
	for i in range(1,26):
		if (n*i)%26==1:
			return i

                2、求出a的逆元后,即可根据仿射函数解密方法decode(y)= x =_a*(y-b)%26求出a的解密字符,具体代码如下:

alphabet='abcdefghijklmnopqrstuvwxyz'

def decode(en_str): #解密
	_n = _a(5) #5为仿射函数y=ax+b的a
	de_str=''
	for words in en_str:
		w_index=alphabet.index(words) #求字符串每一位对应字母表的位置,0-25
		de_index=_n*(w_index-11)%26
		de_str=de_str+alphabet[de_index]
	return de_str

                3、将两个方法合并,整理出来的代码即为最终代码,这里也加上了仿射函数加密的方法,具体如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

alphabet='abcdefghijklmnopqrstuvwxyz'

def _a(n): #求n的逆元,n的范围:{1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25}
	for i in range(1,26):
		if (n*i)%26==1:
			return i

def encode(new_str): #加密
	en_str=''
	for words in new_str:
		w_index=alphabet.index(words) #求字符串每一位对应字母表的位置,0-25
		en_index=(5*w_index+11)%26 #代入仿射函数运算
		en_str=en_str+alphabet[en_index]
	return en_str

def decode(en_str): #解密
	_n = _a(5) #5为仿射函数y=ax+b的a
	de_str=''
	for words in en_str:
		w_index=alphabet.index(words) #求字符串每一位对应字母表的位置,0-25
		de_index=_n*(w_index-11)%26
		de_str=de_str+alphabet[de_index]
	return de_str

print 'encode result: '+encode('simplexue') #simplexue为待加密字符串
print 'decode result: '+decode('xztiofwhf') #xztiofwhf为待解密字符串

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Flag请点击这里查看索引

查看所有Flag文章需要输入密码,需要获取文章密码的童鞋请扫描下面微信或支付宝二维码捐助至少2元(老哥,捐多捐少是个缘分)之后发送支付凭证号联系我获取,Flag大全地址:Flag大全

新功能:捐款的小伙伴请联系我把自己的注册邮箱加入网站白名单,可以免回复看到本站所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜!

微信二维码:
支付宝二维码: