python使用快速乘方求冪進行RSA加解密

2021-10-07 20:15:23 字數 2003 閱讀 2611

rsa演算法原理

2023年美國麻省理工學院的三名密碼學者r.l.rivest,a.shamir和l.adleman提出了一種基於大合數因子分解困難性的公開金鑰密碼,簡稱為rsa密碼。rsa密碼被譽為是一種風格幽雅的公開金鑰密碼。既可用於加密,又可用於數字簽名,安全、易懂,它已成為目前應用最廣泛的公開金鑰密碼。

rsa演算法過程如下:

快速乘法演算法求冪

例如求x16,直接計算的話需做15次乘法。

如果重複對每個部分結果做平方運算即求x,x2,x4,x8,x16則只需4次乘法。

在這裡插入**片

deffastexpmod

(b, e, m)

: result =

1while e !=0:

if(e&1)

==1:# ei = 1, then mul

result =

(result * b)

% m e >>=1

# b, b^2, b^4, b^8, ... , b^(2^n)

b =(b*b)

% m return result

class

rsatest()

:#***********begin**************

def__init__

(self,e,d,n)

: self.d = d

self.e = e

self.n = n

defencrypt

(self,p)

: self.p = p

return fastexpmod(self.p,self.e,self.n)

defdecrypt

(self,enc)

: self.enc = enc

return fastexpmod(self.enc,self.d,self.n)

#************end***************

defevidence

(p,e,d,n)

:"""

:param p: 明文

:param e: 公鑰

:param d: 私鑰

:param n: 模

"""rsa = rsatest(e,d,n)

enc = rsa.encrypt(p)

print

(enc)

detext = rsa.decrypt(enc)

print

(detext)

#***********begin**************

if __name__ ==

"__main__"

: str1, str2 ,str3,str4 =

input()

.split(

) p =

int(str1)

e =int(str2)

d =int(str3)

n =int(str4)

evidence(p,e,d,n)

乘方快速冪 OR 乘法快速冪

關於快速冪這個演算法,已經不想多說,很早也就會了這個演算法,但是原來一直靠著模板雲裡霧裡的,最近重新學習,發現忽視了乙個重要的問題,就是若取模的數大於int型,即若為 int64的時候應該怎麼辦,這樣就得用到乘法快速冪 乘方快速冪了。快速冪一般是為了解決乘方取模問題的,顯然思想就是二分,下面貼上快速...

求乘方取模(快速冪 慢速乘法模板)

題目描述 給定非負整數a b m,求 a b mod m。輸入描述 input description 包含多組輸入,輸入處理到eof。每組輸入僅一行,三個用空格隔開的非負整數a b m。輸出描述 對於每組輸入,輸出一行,乙個非負整數,即 a b mod m。樣例輸入 2 3 100006 32 7...

演算法 快速冪,快速冪求逆元

基本思想 3 11 11 1011 3 1 3 3 2 9 3 4 81 3 8 6561 3 11 3 9 6561 第一種 當資料範圍m,k,p 10 9 int qmi int m,int k,int p return res 值得一提 k 1 除以2向0取整 詳細可以看狀態壓縮dp 內含位運...