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
相关文章
相关标签/搜索