設計說明
rsa演算法為一種非對稱密碼演算法,選取兩個互異大素數p,q,計算n=pq,f=(p-1)(q-1),選取不同於q,p的另一素數e並計算在模f下的乘法逆元d,若明文為m,即可根據加密演算法c=me mod n進行加密編碼,解密時使用m=cd mod n即可。e也稱為加密指數,d被稱為解密指數。以上引數中,稱為公開金鑰,為私用金鑰。
設計中先將一定範圍內的所有素數儲存在陣列內,實驗中的素數範圍為(1000,100000),然後隨機選取兩個大素數,之後計算f,n,隨機選取另一素數e,使用擴充套件歐幾里得演算法來求取e在模f下的乘法逆元d,最後利用快速冪取模函式來對原文進行加密和解密。實驗中的明文為儲存在字元陣列內的a-z字元。
模組說明
- 素數生成模組
素數篩選說明:該函式篩選出1000~100000內的素數並儲存在陣列num內,傳入引數為整形陣列,儲存篩選出的素數,返回值為篩選出的素數個數,實現如下:
素數選取說明:通過隨機的方法,在陣列內選取乙個素數並返回,傳入引數為篩選出的素數陣列及陣列長度
- 乘法逆元求取模組
該函式實現擴充套件歐幾里得演算法,傳入四個引數分別對應:數a,模f及兩個臨時變數,返回值為a的模反元素即在模f下a的乘法逆元
- 加密解密模組
因為底數及冪都是大數,應用數學函式庫實現冪計算較為耗時,故該函式實現快速冪取模演算法,主要用於加密和解密的實現:三個引數分別為底數、冪、模值,返回值為冪取模的結果。
- 主函式模組
因為選取的資料及運算結果都為大數,故大多採用了long long int型別宣告,存入明文a-z字串,呼叫以上各模組來實現完整的rsa演算法。因為大素數隨機生成選取,故主函式模組進行了判斷,選取互異的p,q,e且滿足e
c 實現rsa演算法 RSA演算法實現過程
rsa演算法是實現非對稱加密的一種演算法,其用到很多有關數論的內容,在此我們不多討論。而將目光聚焦於演算法的實現過程。rsa過程 第二步 計算n a b 61 53 3233 第三步 計算 a 1 b 1 60 52 3120 第四步 選擇與3120互質的乙個數e 17,這個e也就是我們的公鑰,需要...
c 實現rsa演算法 RSA 演算法 基本原理篇
咱們每天說非對稱加密,說公鑰私鑰,但是公鑰和私鑰到底是怎麼產生的,加密和解密過程到底是怎麼樣的,不看看具體演算法實現還真是感覺心裡沒底。rsa 演算法是非對稱加密演算法鼻祖,至今仍然是最為廣泛使用的演算法之一,所以我們就來拆解一下 rsa 演算法本身。學東西最怕的就是沒有大思路,直接深入細節。所以開...
RSA演算法研究與PYTHON實現
rsa演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對金鑰,使用其中乙個加密,則需要用另乙個才能解密。rsa的演算法涉及三個引數,n e1 e2。其中,n是兩個大質數p q的積,n的二進位制表示時所占用的位數,就是所謂的金鑰長度。e1和e2是一對相關的值,e1可以任意取,但要求e1與...