RSA加密演算法

2021-07-05 04:59:46 字數 2367 閱讀 7679

因偶然的機會,幫學長去在js中找乙個函式的實現方式,於是費了些力氣幫他找到了函式的實現

rsa.setpublic(p,k);

var enkey = rsa.encrypt(njsessid);

要找的是setpublic和encrypt的實現方式,但實際上這兩個函式呼叫的是crypt.min,js

function rsasetpublic(b, a)  else 

}

function rsaencrypt(d)

var e=this.dopublic(a);

if(e==null)

var b=e.tostring(16);

if((b.length&1)==0)

else

}

雖然幫忙解決了問題,但我表示看不懂,所以就想寫個學習筆記來記錄下rsa.

1、rsa的簡單介紹

rsa是非對稱加密演算法,那什麼是對稱加密演算法,什麼是非對稱加密演算法?

對稱加密演算法就是a使用一種規則對資訊進行加密,b使用同樣一種規則對資訊進行解密,安全性並不好

非對稱加密演算法,則是a生成兩種不同的規則(即公鑰和私鑰),b使用a的公鑰對資訊加密,a使用自己的私鑰對資訊解密,公鑰大家公有的,比如c也想給a傳資訊,就可以用a的公鑰對資訊加密,傳送給a,而b因為沒有a的私鑰,看不了c發給a的資訊

2、rsa需要用到的數學工具

(1)互質

兩個數只有1作為公因子,沒有其他公因子。如11和20

(2)尤拉函式

小於n的正整數中與n互質的個數,求個數的方法就叫尤拉函式

(3)模反元素

如果兩個元素a和n互質,則一定存在乙個數b使得a*b-1被n整除,或者說a*b除以n餘1,則b叫做a的模反元素

3、金鑰是如何生成的?

第一步:隨機產生兩個不相等的質數p和q

第二步:計算p和q的乘積n

第三步:計算n的

尤拉函式f(n) 

即 n 

=(p-1)×(q-1)

尤拉函式f(n)

第四步:選擇乙個整數e,是e大於1小於f(n)

第五步:計算e對於f(n)的模反元素d

第六步:將(n,e)封裝成公鑰,將(n,d)封裝成私鑰,一旦d洩漏,就等於私鑰洩密

實際計算的例子

s1: p=11,q=20

s2: n=p*q=220

s3: f(220)=10*19=190

s4: e=23

s5; 23*d -1 = k*190 等價於 23*x + 190y = 1

寫乙個小的程式,使用擴充套件歐幾里德演算法來計算出x和y的值

public class euclid 

extend_eulid(b,a%b);

int temp=x;

x=y;

y=temp-a/b*y;

return ;

} public static void main(string args)

}

可以得到結果1=(-33)*23+(4)*190

s6、n=220,e=23,d=-33

公鑰(n,e) 就是(220,23)

私鑰(n,d)就是(220,-33)

關於加密解密那裡,需要用到冪模運算(使用蒙哥馬利演算法),可以來驗證公鑰和私鑰的正確性。

4、既然有了公鑰和私鑰,如何加密與解密?

(1)加密

對資訊m加密,使用

m的e次方 = c(mod)n

c則是加密後的資訊

(2)解密

c的d次方 = m (mod)n

m是解密後得到的資訊

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,計...