rsa算法原理

1、算法原理

密碼算法中,按密鑰的類型分爲:對稱密鑰密碼非對稱密鑰密碼(其加密解密不是使用的同一個密鑰)javascript

RSA算法是現今使用最普遍的公鑰密碼算法,屬於非對稱密鑰密碼java

計算原理:

一、取兩個值p、q , 令r = p*q。(注意:p、q爲質數;實際運用的p、q 值越大則越不容易被破解)算法

二、令 l =(p-1)*(q-1)的最小公倍數。工具

三、取任意值e,條件:①e爲整數,② 1<e < l;③e與l互質;(即e與l最大公約數爲1)。測試

四、取值d,條件:①e*d % l == 1;②1<d<l;加密

到這一步,密鑰生成了,主要的值爲:e(公鑰),d(密鑰),r(取模的除數)spa

計算公式:

加密:密文 =Math.pow(明文,e)%r;code

解密:明文 =Math.pow(密文,d)%r;ip

2、測試

測試使用的數據比較小,若是太大,部分工具測出的值會出現加密的數據長度問題。console

var p=3,q=11,r=p*q,
	n=p-1,m=q-1,k,l,e,d;
for(let i=Math.min(n,m);i>=1;i--){
	if(n%i==0 && m%i==0){
	    //最大公因數
	    k = i;
	    //最小公倍數 = 乘積  ÷ 最大公因數
		l = n*m/k; 
		break;
	}
}
console.log("最小公倍數:"+l);//最小公倍數:10
for(let i=2;i<l;i++){
	if(l%i != 0){
		e = i;//e與l互質(即最大公約數爲1)且1<e<l
		break;
	}
}
var m=l-1;
while(m>=2 && m*e%l != 1 ){
	m--;
}
if(m>1){
	d = m
}
console.log("公鑰:"+e,"密鑰:"+d,"取模除數:"+r)//公鑰:3 密鑰:7 取模除數:33

var mm = 13;
console.log("明文:"+mm);
var ll = Math.pow(mm,e)%r;
var pp = Math.pow(ll,d)%r;
console.log("密文:"+ll,"明文(等於mm):"+pp)//密文:19 明文(等於mm):13
console.log(Math.pow(mm,e))//2197
console.log(Math.pow(ll,d))//893871739
相關文章
相關標籤/搜索