小白都能看的懂的RSA密碼演算法原理

2021-09-10 06:34:07 字數 2714 閱讀 6653

rsa加密演算法是一種非對稱加密演算法。應用場景:

加密特點:相對安全、加密效率低、加密資料小

使用rsa加密演算法完整的流程是:

產生對應的公鑰和私鑰

使用演算法對資料加密

使用對應演算法對加密後的資料解密

涉及到幾個概念:尤拉函式、模逆元,我們逐個看一下

尤拉函式

概念:任意給定正整數n,求出在小於等於n的正整數之間有多少個與n構成互質關係。

計算這個值的方式叫做尤拉函式,使用 ϕ(n

)\phi (n)

ϕ(n)

表示如ϕ(8

)=4\phi(8)=4

ϕ(8)=4

,計算8的尤拉函式,1、2、3、4、5、6、7、8,其中1357互質,個數為4.

ϕ (7

)=6\phi(7)=6

ϕ(7)=6

,1、2、3、4、5、6均是,個數為6.

函式特點

模逆元概念:也稱模反元素,如果兩個正整數e和x互質,那麼一定可以找到整數d,是的ed-1被x整除。

( e∗

d)%x

=1(e*d)\%x=1

(e∗d)%

x=1對應的

e ∗d

=k∗x

+1e*d=k*x+1

e∗d=k∗

x+1,此時d就是e的對於x的模反元素。

整理流程圖

其中:公鑰:n和e

私鑰:n和d

明文:m

密文:m

說明:1.n會非常大,長度一般為1024個二進位,目前人類已經分解的最大整數,232個十進位制位元位,768個二進位制位。

2.由於要求出ϕ(n

)\phi(n)

ϕ(n)

,根據尤拉函式特點,最簡單的方式就是n由兩個質數相乘得到p1,p2,ϕ(n

)=(p

1−1)

(p2−

1)\phi(n)=(p1-1)(p2-1)

ϕ(n)=(

p1−1

)(p2

−1)3.最終由ϕ(n

)\phi(n)

ϕ(n)

得到e和d,根據上面的模反元素。

關於rsa的安全:

除了公鑰用到了n和e其餘4個數字是不公開的,目前破解rsa得到d的方式如下:

1.要想求出d,由於e∗d

=ϕ(n

)∗k+

1e*d=\phi(n)*k+1

e∗d=ϕ(

n)∗k

+1。2.e是知道的,但是要知道ϕ(n

)\phi(n)

ϕ(n)

.,必須知道p1和p2.

3.由於n=p1*p2.只有將n因數分解才能算出來。

mac系統內建了openssl(開源加密庫),所以我們可以直接使用敏玲來玩rsa,

命令含義

genrsa

生成並輸入乙個rsa私鑰

rsautl

使用rsa秘鑰進行加密、解密、簽名、驗證等運算

rsa處理rsa秘鑰的格式轉換等問題

//1.載入公鑰

[[rsacryptor sharedrsacryptor] loadpublickey:[[nsbundle mainbundle] pathforresource:@"rsacert.der" oftype:nil]];

//2.載入私鑰

[[rsacryptor sharedrsacryptor] loadprivatekey: [[nsbundle mainbundle] pathforresource:@"p.p12" oftype:nil] password:@"123456"];

nsdata * result = [[rsacryptor sharedrsacryptor] encryptdata:[@"hello" datausingencoding:nsutf8stringencoding]];

//base64編碼

nsstring * base64 = [result base64encodedstringwithoptions:0];

nslog(@"加密之後:%@\n",base64);

//解密

nsdata * dcstr = [[rsacryptor sharedrsacryptor] decryptdata:result];

nslog(@"%@",[[nsstring alloc] initwithdata:dcstr encoding:nsutf8stringencoding]);

HTML基礎,小白都能看得懂的文章

world wide web consortium 全球資訊網聯盟 成立於1994年,web技術領域最權威和具影響力的國際中立性技術標準機構 1.結構化標準語言 xhtml,xml 2.表現標準語言 css 用來美化頁面 3.行為標準 dom.ecmascript 通俗的來說就是增加前端頁面的功能 ...

小白都能看懂的block

首先說明一下,我自己也是乙個小白 這是我對block的一點認識或總結,有不對的地方,希望大家指出來 block就是乙個 塊,用來執行一小段程式的,通常我們定義乙個block 可以用它的基本模型,返回值型別 變數的名字 引數型別 例如 int myblock int 這就是定義了乙個block 這個變...

小白都能看懂的softmax詳解

softmax把一些輸入對映為0 1之間的實數,並且歸一化保證和為1,因此多分類的概率之和也剛好為1 或參考 小白都能看懂的softmax詳解 在機器學習尤其是深度學習中,softmax是個非常常用而且比較重要的函式,尤其在多分類的場景中使用廣泛。他把一些輸入對映為0 1之間的實數,並且歸一化保證和...