RSA加密、签名、数字证书算法、DSA - 非对称加密

非对称加密
RSA(发明家三人的首字母)
DSA(数字签名算法):

1. RSA信息加密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MIlbu1KO-1587801597470)(en-resource://database/19554:1)]

RSA加密步骤 - 例子

1. 计算钥匙阶段 - N的二进制位数即是密钥的长度

一般用的密钥长度是1024位密钥,重要的信息需要2048位密钥

  1. 随便找两个质数:7 与 11

  2. 计算两个质数的模数:N = 7 * 11 = 77

  3. 计算欧拉函数: 6 * 10 = 60

  4. 得出钥匙(钥匙,N)

    • 公钥:1 < 公钥 < 60 并且 公钥与欧拉函数值的公因数只能为1 – 我选择 17作为公钥

    一般写成 公钥(17,77)

    • 私钥:公钥 * 私钥 % 欧拉函数=1 – 计算得 53作为私钥

    一般写成 私钥(53,77)


下列是根据公钥、欧拉函数计算私钥简单Java代码

public static void main(String[] args) {
	int m = 0;
	int pubicKey= 17;
	int oula = 60;
	while(true) {
		int num = oula * (++m) + 1;
		if(num % pubicKey == 0) {
			System.out.println("私钥:" + num/17);
			break;
		}
	}
}

2. 加密、解密阶段

假设明文为 2

  1. 公钥加密:明文的公钥次方 模 两个质数积N – 2 ^ 17 % 77 = 18 – 即密文为18

  2. 私钥解密:密文的私钥次方 模 两个质数积N – 18 ^ 53 % 77 = 2 – 即明文为2


注意:按照我的数字实验私钥解密的话,必须使用 BigInteger进行计算,因为数字太大了Integer已经超出范围了

 public static void main(String[] args) {

	BigInteger sum = new BigInteger("1");
	BigInteger num = new BigInteger("18");

	for(int i = 0; i < 53; i++) {
		sum = sum.multiply(num);
	}
	BigInteger mingWen = sum.mod(new BigInteger("77"));
	
	System.out.println(mingWen);

}

2. RSA签名

  1. 发送者:使用发送者自己私钥将明文进行加密成签名信息,签名信息伴随明文一起发送
  2. 接收者:使用发送者的公钥将签名信息进行解密,解密后的信息跟明文进行比较是否一致,如果一致则表明信息没有被修改。

具体流程

发送者A发送的明文内容
使用A的私钥进行对A内容进行加密 - 该部分叫签名
签名跟明文合并一起用接收者B的公钥进行加密 -- 该部分成为需要发送的密文
网络传输
接收者B收到网络的密文信息,使用B的公钥进行解密,得到签名跟明文的信息
接受者B使用A的公钥进行签名解密后的内容跟明文内容是否一致
如果一致,则确定是A发送的,
不一致则发送不是A发送的

3. 数字证书 - 权威机构证明传过来的公钥是对方的



为什么会出现数字证书 - 因为用户与用户之间受到中间人的攻击

  1. 小A与小B在网络中使用RSA加密进行交流
    • 小A发送给小B的信息必定使用小B的公钥进行加密
    • 同理,小B发送给小A的信息必定使用小A的公钥进行加密
  2. 但是中间人冒充小B,小A,将中间人自己的公钥发送给小A、小B,则小A、小B发送的信息都可以被中间人用自己的私钥可以看见,或者修改信息。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1rI1Zi7Z-1587801597477)(en-resource://database/20010:1)]

为证明传过来的公钥是对方 - 则出现CA(证书颁布机构)- 为公钥颁布身份证的作用

  1. 用户A、用户B去CA认证机构进行登记身份证 - 用来为自己公钥确定身份

  2. CA机构各生成一对只属于他们的公钥私钥

  3. 注意:CA自身自己会有一把公钥C、私钥D

  4. 例如小A的证书 - 明文内容是A的公钥、过期时间、以及其他的信息,经过不可逆的算法进行加密如 MD5、SHA-1、SHA-256等,在使用私钥D进行加密形成该证书的签名。证书上的明文内容 + 签名密文 就是证书的内容

  5. 到时小B发送消息给小A的时候,小A首先发送自己的证书给小B即可, 同理

  6. 小B 收到 小A 的证书,则查看证书上CA机构是否合法,不是谁都可以充当“公安局”的,如果不是信任的CA机构 - 浏览器会自动弹出提示

  7. 如果确定证书机构是受信任的。则使用CA的公钥解密签名 - 得到一段不可逆的密文1

  8. 证书上会写明使用什么算法进行加密签名,则使用证书上的算法进行加密证书上的明文内容,得到密文2

  9. 如果密文1 与 密文2 相同 则说明证书没有被修改,则证书上的公钥可以使用,否则不可使用,证书内容被中间人修改过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值