上篇简单介绍了一下仿射密码:仿射密码的加密与解密,很多东西都没有深入去挖掘,这次上完课后对实现它的一些概念公式又有了一个更深的认识。
首先介绍几个概念:
1.模同余
模同余:给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系。
例如:
3被2除 余1
5被2除 余1
3,5 被2除有相同的余数
所以 3 同余 5 模 1 ,记做:3 ≡ 5 (mod 1)
其中定义群Zm = {0, 1, 2, …, m-1}
证明:
必要性:
若a和b除以m留下相同的余数r,
a=q1m+r , b=q2m+r ,q1和q2为某两个整数
所以a-b=(q1m+r)-(q2m-r)=m(q1-q2)
根据整除定义:(a-b)/m = (q1-q2),整数相减还是整数,由同余式定义得出结论:a≡b(mod m)
充分性:
假定(其中r1和r1小于m,q1和q2为整数)
a = q1m+r1 , b = q2m+r2
则: a-b = (q1-q2)*m + (r1-r2)
因为,则r1-r2=0,即r1=r2
2.一次同余方程唯一解定理
设 a ∈ Zm ,对任意的 b ∈ Zm,同余方程 ax ≡ b (mod m) 有唯一解 x ∈ Zm 的充分必要条件是:
gcd(a, m) = 1 (表示a和m的最大公约数等于1)
证明如下:
3.欧拉函数和欧拉定理
欧拉函数
设a ≥ 1,m ≥ 2, 如果gcd(a, m) = 1,则称a与m 互素,Zm中所有与m互素元素的个数用φ(m)来表示(函数φ称为欧拉函数)
例如φ(10) = 4,因为1,3,7,9均和10互质。
计算方法:
1.先化为标准分解式形式:
例如:
2.再依照下式规则计算
这其中 {1,5,7,11,13,17,19,23,25,29,31,35} 与36 互质,共计12 个
所以如果 m为质数 则 φ(m) = m-1
欧拉定理
当 𝑎 , 𝑚 互质时, 𝑎^𝜙(𝑚) ≡ 1 mod (𝑚) (这个式子也可以求逆元)
费马小定理
当 𝑚 为质数且 𝑎 不为 𝑚 的倍数时有 𝑎^(𝑚−1)≡1mod(𝑚)
根据费马小定理可知: 𝑎^(𝑚−2) 就是a在模m意义下的逆元.
4.乘法逆元
乘法逆元求解:
1.遍历,参考上一篇 仿射密码的加密与解密
2.拓展欧几里得:
def ext_gcd(a, b): #扩展欧几里得算法
if b == 0:
return 1, 0, a
else:
x, y, gcd = ext_gcd(b, a % b) #递归直至余数等于0(需多递归一层用来判断)
x, y = y, (x - (a // b) * y) #辗转相除法反向推导每层a、b的因子使得gcd(a,b)=ax+by成立
return x, y, gcd
a, b = 7, 26 # 求7关于模26的逆元
x, y, gcd = ext_gcd(a, b)
x0 = x % b # x0即为乘法逆元
print(x0)
5. 定义在Zm上的矩阵求逆
设矩阵
是定义在Zm上的矩阵,
举个例子:
这其中,9 关于模26 的乘法逆元为3.