公钥私钥 乐观锁与悲观锁

 1 公钥私钥

 

 

 

   小姐姐A有两把钥匙 一把公钥n 一把私钥m

   大姐姐B也有两把钥匙 一把公钥N 一把私钥M


   现在小姐姐A把公钥发给 学生A 大姐姐B 学生C  一人一把
   
   学生A 喜欢 小姐姐A
   大姐姐B 喜欢 学生A


现在学生A要给小姐姐A写一封保密的信,他写完以后 用小姐姐A给的公钥n加密 ---> 信[n]
   
   小姐姐A收到信后 用私钥m解密,就能看到信的内容(只有私钥m能解密,大姐姐B和学生C拿到也无法看到信内容)
   
   小姐姐A要给学生A回信,她写完以后 先用hash函数 生成信件摘要(可以理解成主要内容) ---> [digest]
   
   然后 小姐姐A用私钥 对摘要[digest]加密 生成--->数字签名{[digest][m]}  ---> 可以理解成将hash过的[digest] 再用私钥m包了一层
   
   最后,小姐姐A将数字签名附在信上,一起发给学生A  ---> 信{[digest][m]}
   
   学生A收到信后,取下数字签名,用公钥n解密,得到信的摘要 ---> 确认了信是小姐姐A发出的 ---> 学生A再对信件本身用hash函数,将得到的结果和摘要进行对比,如果 摘要[用公钥n解密后] == 信内容[hash后] 则证明信件未被修改,是小姐姐A本人写的
   
   大姐姐B知道小姐姐A和学生A互通信件后,想了一个办法,大姐姐B将学生A的属于小姐姐的公钥n 换成大姐姐B自己的公钥N,
导致:
   ---> 学生A现在拥有的是大姐姐B的公钥N,学生A还以为他拿着的公钥N是小姐姐A的公钥n
   ---> 现在大姐姐B就可以将自己的私钥M做成数字签名,假装小姐姐A写信给学生A
   ---> 学生A收到大姐姐B写的信再用大姐姐B的公钥解密,得到的结果依旧正常
   
   ---> 一段时间后,学生A发现信的内容不像小姐姐A写的,他也想了一个办法
   ---> 他请小姐姐A去 证书中心 (CA),为她的公钥加个证明 ---> 新的数字证书:{[公钥n][CA的私钥c]}
   
   ---> 现在大姐姐B就无法再假装小姐姐A给学生A写信了
        ---> 大姐姐B伪装的数字证书:{[公钥N][大姐姐B的私钥M]}
  ---> 小姐姐A的数字证书:{[公钥n][
CA的私钥c]}
   
   

2 乐观锁与悲观锁

 

 

1 乐观锁:
总是假设最好的情况 每次去拿数据的时候 都认为别人不会修改数据 所以不上锁 只是在最后更新的时候会判断一下是否有人修改数据
   -乐观锁适用于写操作比较少的场景(多读场景)
   
2 悲观锁
总是假设最坏的情况 每次去拿数据的时候都认为别人会修改数据,所以每次拿数据的时候都会上锁,这样别人想拿这个数据的时候就会阻塞直到他拿到锁(共享资源每次只给一个线程使用,其他线程阻塞,用完后再把资源转让给其他线程)
   -悲观锁适用于写操作比较多的场景



posted @ 2021-04-27 16:12  Jerry`  阅读(71)  评论(0编辑  收藏  举报