00 前情提要
最近臨近期末,這學期上的現代密碼學要求我們實現密碼學上一些小知識點的代碼實現,這就從最簡單的模逆運算開始。
01 實現背景
先簡單介紹一下什麼是模逆運算呢,要定義這個運算,需要三個整數。a的模逆元素(對n取模) 爲b,意味着a*b mod n= 1。則我們稱b爲a的模逆。比如17mod26的模逆值爲19,其中a = 17 ; m = 26 ; b=19
再比如:
35 mod 7=1 , 3 關於 7 的模逆元素就是5
33 mod 8=1,3 關於 8的模逆元素是3
02 實現源碼
#要定義這個運算,需要三個整數。a的模逆元素(對n取模)爲b,意味着a*b mod m=1,則稱a關於m的模逆爲b
def gcd(a,b):
while a!=0:
a,b = b%a,a
return b
#定義一個函數,參數分別爲a,n,返回值爲b
def findModReverse(a,m):#這個擴展歐幾里得算法求模逆
if gcd(a,m)!=1:
return None
u1,u2,u3 = 1,0,a
v1,v2,v3 = 0,1,m
while v3!=0:
q = u3//v3
v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3
return u1%m
print('''"******************歡迎來到模逆計算器******************
提示信息:a關於m的模逆爲b
示範: 17mod26的模逆值爲19,其中a = 17 ; m = 26 ; b=19
'''
)
a = int(input("現在,請輸入a值>>>>>"))
m = int(input("現在,請輸入m值>>>>>"))
print(f'你所求的b值爲:{findModReverse(a,m)}')
print('''"*********************感謝您的使用*********************
by: 3171106127 XXX
''')
部分代碼參考自CSDN的博主
03 實現效果