直到今天,我才不再認為「rsa演算法只在考試用過」,因為最近做的支付就用到了這個演算法,我才可以有理有據地告訴我自己:「rsa不單單在考試用到啊!」。你要問我為什麼,我只能告訴你,繼續看下去!
不知道提到加密演算法,正在看部落格的你,最先想到的是哪種加密?
我只能告訴你,我最先想到的是公鑰加密,這是一種很6的加密。因為在公鑰加密出現之前,所有的加密都是一種模型:
1)甲使用某種規則對檔案加密,將檔案和加密方式告訴乙;
2)乙使用同一種規則對檔案進行解密;
在上述模式(也就是俗稱的「對稱加密」)中,人們不得不為秘鑰的儲存和傳遞進行擔憂,因為在這個加密過程中,甲必須將加密的規則告訴乙,否則乙方無法完成解密;這個讓加密專家頭疼的問題一直持續到--rivest、shamir 和 adleman 這三個人在2023年提出的「非對稱加密」演算法。這種演算法就是我們一直在說的「rsa加密演算法」;
這種演算法非常可靠,因為它使用的秘鑰越長,破解難度係數就會越高,這樣檔案的傳輸過程就會越安全。據記載,目前被破解的最長rsa秘鑰是768個二進位制位。也就是說,當前秘鑰長度超過768位的秘鑰,還無人能破解。所以我們基本上可以認為:1024位的rsa秘鑰基本安全,2048位的秘鑰及其安全。
要想知道rsa公鑰和私鑰的秘密,我們需要先回顧一些數學知識:素數、互質數、指數運算、模運算;下面舉乙個栗子:
李雷要向韓梅梅傳遞訊息,但是不想輕易的被別人破解,所以對這則訊息進行了加密:
▶ 選擇兩個不相等的比較大的質數(x,y),並且計算出x與y的乘積z;
李雷選擇的這兩個質數分別是 61和53(實際應用中,這兩個質數越大,就破解的難度係數就越高),並計算出兩個質數的乘積:z = 61 * 53 = 3233;也就意味著當前秘鑰的長度是3233 的二進位制位,也就是110010100001,一共12位,所以當前李雷使用的秘鑰就是12位;
▶ 使用叫 尤拉函式 的這個東西,計算出r = (
x-1)(y
-1)計算所得:3120;
▶ 隨機選擇乙個整數e,確保1 < e
李雷在1和3120之間隨機選擇了17,;
▶ 利用公式: e * d = 1(mod r)計算出一組整數解(a,b)=(2753,-15)
▶ 組裝私鑰和公鑰
上述過程中,z=3233,e=17,d=2753,所以李雷獲取到的公鑰就是(3233,17),私鑰就是(3233,2753);
所以整個過程歸為一張圖就是:
//加密或者解密之後的資料
long rsamessage = 0l;
//加密核心演算法
rsamessage = math.round(math.pow(message, key)) % basenum;
return rsamessage;
} public static void main(string args)
}程式執行執行的結果為:
加密前:24
加密後:30
解密後:24
以上就是rsa演算法加密解密的相關東西,關於支付的相關知識會在下篇中寫到,謝謝大家關注!
RSA加密演算法
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也不是素數。另一方面,13除了等於13 1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為 質數 二 什麼是 互質數...
RSA加密演算法
演算法的描述 1.選取兩個素數p,q 2.計算n p q,fn p 1 q 1 3.選擇乙個整數e,使得e與fn的最大公約數為1,e將會用於對資料進行加密。4.計算出乙個整數d,使得d e除fn的餘數為1。d用於對密文進行解密,還原出明文。5.假設明文為m,密文為c。如果需要對原文進行加密,則進行如...
RSA加密演算法
一 rsa是公鑰加密演算法之一,該演算法的數學基礎是 1 初等數論的euler定理,即 若整數a與整數n互素,則a n 1 mod n 其中,n 為尤拉函式。2 大整數分解很困難,即給定乙個大整數n,將其分解為n p q,兩個素數乘積十分困難。二 rsa基本原理 1 金鑰的生成。選擇大素數p,q,計...