開發過程中, 常常會涉及到加密演算法的應用, 因不知其所以然, 導致忘性依舊, 整理成冊, 溫故而知新
1.找兩個質數 p q : ( 除了1和本身之外, 沒有別的因數 )
2.計算公共模數: n = p * q ( 因為p和q都是質數, 所以n的產生只能通過p * q , 不存在其他的方式 )
3.計算尤拉函式: φ(n) = (p-1)(q-1)
解釋一下尤拉函式: 如果n為正整數, 那麼φ(n)代表與n互質 ( 公約數只有1的兩個數稱之互質 ) 的數字的個數
exp: φ(8) = 44.計算公鑰 e : 1 < e < φ(n) && e 與 φ(n) 必須互質與8互質的數有: 1 3 5 7
exp: 1 < e < φ(8)5.計算私鑰 d : e * d % φ(n) = 1則 e可以取 3, 因為φ(n)=4
exp: 3 * d % 4 = 16.重點: 因為 e 與 φ(n) 互質, 且 e * d % φ(n) = 1, 可以反推 d 和 φ(n) 也互質d = 3 | 7 | 11 | 15 | .... | d(3) + 4n
因為 e 與 d 互質, 且 n 為質數, 可以得到下面的公式
即: 加密可以用:c = m^e mod n 注釋: c:密文 m:明文
即:解密可以用:(注意是 mod n 而不是 mod φ(n))m =c^d mod n 注釋: c:密文 m:明文
即: 公鑰為: (e, n) 私鑰為: (d, n)
7.重點: 如果想通過公鑰得到私鑰: 則必須知道: φ(n)
而φ(n) = (p-1)(q-1)目前已知最大可分解的公約數大概7百位則必須知道p和q
而p和q必須通過分解n來得到
所以破解rsa加密演算法非常困難
rsa模值一般都會取1024bits以上 2048bits以下
換算成10進製是 2^1023 + 1 ~ 2^2047 + 1
1、找出質數 p 、q
p = 32、計算公共模數q = 11
n = p * q = 3 * 11 = 333、 尤拉函式n = 33
φ(n) = (p-1)(q-1) = 2 * 10 = 204、計算公鑰eφ(n) = 20
1 < e < φ(n)6、公鑰加密1 5、計算私鑰de * d % φ(n) = 1
3 * d % 20 = 1
根據上面可計算出 d = 7 | 27 | d(7) + 20n
為了演示,就加密乙個比較小的數字 m = 27、私鑰解密公式:c = m^e mod n
其中: m = 2; e = 3; n = 33
代入公式: c = 2^3 % 33 = 8
明文 「2」 經過 rsa 加密後變成了密文 「8」
m =cd mod n側面解讀其中: c = 8; d = 7; n = 33
代入公式: m = 8^7 % 33 = 2 8 * 8 * 8 * 8 * 8 * 8 * 8=2097152
8 * 8 * 8 * 8 * 8 * 8 * 8 % 33 = 2
密文 「8」 經過 rsa 解密後變成了明文 2
公鑰私鑰的生成和一開始選的質數沒關係, 只與φ(n)有關係, 因為秘鑰對裡, 儲存的是 n, n = p*q, 但是 pq 分解不出來, 所以就不能得到φ(n)
RSA演算法原理
rsa演算法原理 經過上述準備工作之後,可以得到 根據費爾馬小定義,根據以下公式可以完成解密操作 rsa本身演算法的核心思想還是比較簡單的,加密 解密演算法的區別也只是在乘方取模部分使用的數字有所區別而已 當然,實際運用要比示例 複雜得多,由於rsa演算法的公鑰私鑰的長度 模長度 要到1024位甚至...
RSA演算法原理
rsa演算法是最廣泛使用的非對稱加密演算法。金鑰長度為1024位,特殊情況下比如國家重要的一些東西採用2048位。在理解rsa演算法之前先來看4個數學概念 互質關係 兩個整數,除了1之外沒有其它公因子,就稱這兩個整數具有互質關係。尤拉函式 用 n 表示。例如在1 8中,與8形成互質關係的有4個,那麼...
RSA演算法原理
一 rsa演算法數論 將兩個大素數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。二 rsa演算法涉及三個引數,n e1 e2。三 公私鑰生成過程 1 首先,需要兩個大質數,p和q,並且p不等於q。2 n是兩個大質數p q的積。n的二進位制表示時所占用的位數就是...