非对称加密算法(RSA)

1》非对称加密过程:

国内使用的是双证书体系,即用户同时拥有签名证书加密证书两张证书。

签名证书是用户的身份验证是和CA协商的结果

加密证书是用来对信息进行加密,是用户和秘钥管理系统生成

①过程是生成公钥和私钥的过程,基于RSA算法实现

②过程是CA对用户的身份进行签名,目的是验证A的身份,这样在A和B通讯过程中,A可以把自己的数字签名发送给B,B得到此数字签名后就可以通过CA的公钥对其进行解密斌进行身份验证

③④同理

⑤A对要传输的信息进行加密传输,B接受后进行解密

2》RSA原理:基于两个大质数相乘十分容易,但是想要对其乘积进行因式分解极其困难

3》算法:1>选择两个不同的大质数p,q

  1. 计算乘积n=pq,r=(p-1)(q-1)
  2. 选择大于1小于r的随机数e
  3. 求得e关于模r的模反元素(当且仅当e与r互质时),命名为d(e*d=1(modr))
  4. 将q,p销毁,以{e,n}为公开密钥,{d,n}为私有密钥

4》例子:

假设p=3,q=11

n=33,r=20,ed=20n+1->e=3,d=7(可以互换),{3,33}为公开密钥,{7,33}为公开私钥

5》代码:

public class SimpleRSA(){
public static long rsa(int baseNum,int key,long message){
	if(baseNum<1||key<1){
		return 0L;
	}
	//加密或解密后的数据
	long rsaMessage=Math.round(Math.pow(message,key))%baseNum;
	return rsaMessage;
}
public static void main(String[] args){
	int baseNum=3*11;
	//公钥
	int keyE=3;
	//密钥
	int keyD=7;
	//未加密的数据
	long msg=24L;
	//加密后的数据
	 long encodeMsg=rsa(baseNum,keyE,msg);
	//解密后的数据
	long decodeMsg=rsa(baseNum,keyD,encodeMsg);

	System.out.println("加密前:" + msg);
    System.out.println("加密后:" + encodeMsg);
    System.out.println("解密后:" + decodeMsg); 
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41047322/article/details/81152181