提起RSA
你們必定不陌生,在開發中常常使用,也常常聽同事說道。算法
話說好久之前,人們就懂的了加密這個技術。在戰爭時期,間諜就會拿着 密文
和 密匙
來對信息就行傳遞。 這種簡單的 密文
+ 密匙(key)
就是 對稱加密
安全
加密: 明文 + 密匙bash
解密: 密文 + 密匙函數
因爲這種加密方式過於簡單,因此後來引入了數學算法。 RSA
就是由特殊的數學算法構成的,也是非對稱加密算法
。非對稱加密須要兩個密鑰:公鑰(public key)
+ 私鑰(private key)
加密
用公鑰加密,私鑰解密spa
私鑰加密,公鑰解密code
若是兩個正整數m和n互質,那麼m的φ(n)次方減去1,能夠被n整除。 cdn
一下是幾種狀況定理0 算術函數f若是知足對於任意兩個互質的正整數m和n,均有f(mn)=f(m)f(n),就稱f爲積性函數(或乘性函數)。 若是對於任意兩個正整數m和n,均有f(mn)=f(m)f(n),就稱爲徹底積性函數。blog
定理1 對於素數p,ϕ(p)=p−1。開發
定理2 ϕ(pn)=pn−pn−1,由於素數冪pn不互質的只有p的倍數,一共有pn/p=pn−1個。
定理3 若m、n互質,ϕ(mn)=ϕ(m)ϕ(n),因此歐拉函數是積性函數。 由於mn互質NN,和m互質的數乘上和n互質的數就會和mn互質。
定理4 設n=p1a1p2a2...pkak爲正整數n的素數冪分解,那麼ϕ(n)=n(1−1/p1)(1−1/p2)...(1−1/pk)。 由定理2,ϕ(pn)=pn−pn−1=pn (1-1/p),又由定理3,ϕ(n)=p1a1p2a2...pkak(1−1/p1)(1−1/p2)...(1−1/pk)=n(1−1/p1)(1−1/p2)...(1−1/pk)
例如:
ϕ(8) = ϕ(2^3) = 2^3 - 2^(2-1) = 8 - 4 = 4
ϕ(15) = ϕ(3) * ϕ(5) = 2 * 4 = 8
複製代碼
歐拉定理的特殊狀況:若是兩個正整數m和n互質,並且n爲質數!那麼φ(n)結果就是n-1。
若是兩個正整數e和x互質,那麼必定能夠找到整數d,使得 ed-1 被x整除。 那麼d就是e對於x的「模反元素」
那麼,經過一系列的數學轉換,最終得出了RSA算法
公鑰:e 和 n
私鑰:d 和 n
明文:m
密文:c
複製代碼
總共生成6個數字:p一、p二、n、φ(n)、e、d
除了公鑰用到了n和e 其他的4個數字是不公開的。 目前破解RSA獲得d的方式以下:
那麼RSA有優勢和弊端是什麼了?
優勢
缺點