公钥私钥 乐观锁与悲观锁
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 悲观锁
总是假设最坏的情况 每次去拿数据的时候都认为别人会修改数据,所以每次拿数据的时候都会上锁,这样别人想拿这个数据的时候就会阻塞直到他拿到锁(共享资源每次只给一个线程使用,其他线程阻塞,用完后再把资源转让给其他线程)
-悲观锁适用于写操作比较多的场景
愿君前程似锦,归来仍是少年