仿射密码 affine

参考链接:https://www.cnblogs.com/0yst3r-2046/p/12172757.html

仿射加密法

仿射密码 affine_第1张图片

在仿射加密法中,字母表的字母被赋予一个数字,例如 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为明文。

设仿射加密函数是

由上表知:所以相应的仿射解密函数是

若加密明文是  sorcery  ,首先把明文每个字母转换为数字 18,14,17,2,4,17,24 。然后对明文进行加密,这里以第一个字母s为例:

e(x)=(11*18+6)mod 26

e(x)=204 mod 26

e(x)=22 

对照下表:

python代码:

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)

你可能感兴趣的:(misc,web,网络安全,python,web安全)