今天我跟大家聊一聊我对仿射密码的理解。
仿射密码是加法移位密码和乘法移位密码的结合,其加密算法和解密算法是:
E(x)=ax+b(mod m);
D(x)=a-1(x-b) mod m.
其中a,m互质,即gcd(a,m)=1,a,b为仿射密码的密钥。m为字母个数,a-1是a在Zm群的乘法逆元(觉得乘法逆元对于仿射很重要)。然后,当x=0的时候,它就是一个加法移位密码,要是m是26的话,它就是个凯撒密码;要是b=0,它是个乘法移位密码。
接下来我们讲乘法逆元,求乘法逆元有两种方法,费马小定理和拓展欧几里得定理。(顺带吐槽,费马竟然是个业余数学家,,,业余的,,,)。
那么什么是费马小定理和拓展欧几里得定理呢?
费马小定理:假如m是质数,且gcd(a,m)=1(a和m互质),那么 a^(m-1) ≡ 1(mod m),即 (a^(m-1) )%m= 1。
这是一个例题,大家就凑合着理解费马小定理吧。
用其求解乘法逆元可将 a^(m-1) ≡ 1(mod m)化为a*a^(m-2)≡1(mod m),将x看成a^(m-2),
那么可求得a的乘法逆元x为a^(m-2)≡(mod m).
然后是拓展欧几里得定理,这个比费马小定理要难理解,它是用来在已知a, b求解一组x,y,,它可以在求得a,b最大公约数的同时,能找到整数x,y(其中一个很可能是负数),使它们满足贝祖等式: ax+by = gcd(a, b) =d。贝武等式,又名裴属定理,gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|),可有这几种形式。如何用拓展欧几里得算法求解乘法逆元呢?我个人觉得挺复杂的,这个博客讲得挺详细的:https://blog.csdn.net/stray_lambs/article/details/52133141
我的仿射密码有点水。另外,仿射密码代码网上自寻吧,没敲出来。大家要是想更详细的了解如何求解乘法逆元的话,可以去这篇博客看一下:https://blog.csdn.net/STcyclone/article/details/52081822
此图是我向人请教的,能看懂就是不太好解释。