1. 程式人生 > 其它 >Unity之熱更新:(三)XLua

Unity之熱更新:(三)XLua


一.基礎知識

1.互質的關係

2.取餘操作

\(a\ mod\ b =3\)
\(a\ \equiv\ 3(mod\ b)\)

java/python程式碼
a%b = 3

3.尤拉函式

定義-給定正整數n,小於n的正整數中有多少個與n互質?

4.尤拉函式的性質

\(\phi(1)=1\)
\(如果n是質數,\phi(n)=n-1\)
\(如果n分為 n=p^k,p是質數,phi(p^k) = (p)^k - (p-1)^k =(p^k)(1-\frac{1}{p})\)

\(比如\phi(8)=\phi(2^3) = 2^3-2^2 =4\)

\(如果n分為兩個"互質的"質數相乘 n=p_1 * p_2 ,則\phi(p_1 p_2)=\phi(p_1)\phi(p_2)\)

\(比如\phi(56)=\phi(7)\phi(8)\)

\(任意n可以寫成幾個質數的乘數 n=p1^{k_1}p2^{k_2}....\)

\(\phi(n)=\phi(p_1^{k_1})\phi(p_2^{k_2})...... = [(p_1)^{k_1} - (p_1-1)^{k_1}] [(p_2)^{{k_2}} - (p2-1)^{k_2}] ... = p_1^{k_1} p_2^{k_2} ... (1-\frac{1}{p_1})(1-\frac{1}{p_2})\)
\(=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})....\)

5.尤拉定理

\(若a,n互質,a^{\phi(n)} = 1 (mod\ n)\)

6.費馬小定理

\(在尤拉定理的基礎上,若n為質數,a^{n-1} = 1 (mod\ n)\)

7.模逆,模反的概念

\(若a,n互質則必然有 b,a,b互為模反元素\)
\(ab \equiv 1(mod\ n) ,a,n互質\)

模逆的存在性
\(a^{\phi(n)} = 1 (mod\ n) -> a * a^{\phi(n)-1} = 1 (mod\ n)\)
\(b= a^{\phi(n)-1} 必然存在b\)


二.RSA演算法流程

1.選兩個質數 p q
2.n=p * q
3.計算尤拉函式 phiN = phi n = (p-1)(q-1)
4.選一個與phiN 互質的數 e 一般選 65537
5.計算e 對於 phiN的模反 d
\(ed=1(mod\ phiN)\)


\(d=a^{\phi(phiN)-1}\)

至此我們得到有以下引數

引數 含義
\(p\) 質數
\(q\) 質數
\(dp\) \(=p-1\)
\(dq\) \(=q-1\)
\(n\) \(= p * q\)
\(phiN\) \(= \phi(n) = (p-1)(q-1)\)
\(e\) \(與phiN 互質,一般取 65537\)
\(d\) \(e\)互為模逆

結果

公鑰(n,e)
私鑰(n,d) 或者 (n,p,q)

加密,解密過程

\(m-明文\)
\(c-密文\)
加密
\(c = m^e mod\ n\)
解密
\(m = c^d mod\ n\)

證明過程

待補充

加解密思考

攻擊方只有公鑰 (n,e),攻破私鑰,需要引數d或者phiN,此時就需要因式分解得到 p 和 q才能得到phiN,d
因此是否能攻破私鑰取決於質數因數分解的效率

待遺留的事項

1.尤拉函式性質證明

\(如果n分為 n=p^k,p是質數,phi(p^k) = (p)^k - (p-1)^k =(p^k)(1-1/p)\)
\(如果n分為兩個"互質的"質數相乘 n=p1 * p2 ,則phi(p1 p2)=phi(p1)phi(p2)\)

2.尤拉定理證明

3.模反計算
輾轉相除法/擴充套件歐幾里德演算法

4.最後加密演算法怎麼優化-蒙哥馬利冪模運算
\(c = m^e\ mod\ n , e是一個質數\)