1.公钥私钥

1.1一些规则:
  1. 公钥加密的数据只有私钥能解开
  2. 私钥加密的数据只有公钥能解开
  3. 公钥有很多把,私钥只有一把
    注:无需知道原理,只要记住这么个规则
1.2这些规则产生的结论:

下面假设你有一把私钥和公钥,你给你的朋友ABCD一人一把公钥

  • 如果你要加密一份数据,那很简单,只需要用公钥加密该数据即可,这样除了你手里的私钥,没人能解密这份数据
  • 如果你要给朋友们发送一份数据,可以用私钥将该数据加密,这样你的朋友们就可以用你给的公钥解开这份数据,以此你的朋友们就能确定这份数据是你而不是其他人发的(因为只有你的公钥才能解开你的私钥),就好像你在数据上签了个名似的

所以得到以下结论:

  1. 公钥加密用来保密数据 ,但不能用来数据签名(因为公钥太多人有了)
  2. 私钥加密用来给数据签名,但不能用来保密数据(因为公钥太多人有了)

2.签名验签的使用

从以上结论我们可以找到,签名验签的基本作用就是可以确定数据的来源
下面我们可以融合进一些新功能

2.1增加完整性校验

签名验签用来保证数据的来源和完整性。

假设你有一把私钥和公钥,你给多家银行配有公钥,你在给银行发送数据时可以这么做:

Java 不通过签名校验jwt token 合法 java签名验签的做法_公钥加密

这样的话,只要银行能将签名值解析出来,就说明数据是你发的。只要hash值相同,就说明你的数据在中途没有被改变过,数据是完整的。

2.2增加保密性

Java 不通过签名校验jwt token 合法 java签名验签的做法_数据_02

在这里插入图片描述
如图所示,只要双方使用同样的AES加解密,就可完成对数据的保密工作。


3.对一篇文章的看法

问题一:

既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?

回答一:

CA都是一些可靠的大机构,它们的公钥在自己网站上提供下载,所以无法伪造

问题二:

那么在下载到本地后,如何避免被替换的问题呢?感觉跟道格用自己的公钥替换鲍勃的公钥一样啊,假若苏珊每次也是重新下载鲍勃的公钥岂不是同样可以避免公钥被替换的问题,那么还要数字证书干什么?

回答二:

苏珊可能有很多个好友如Bob1、Bob2....Bobn。如果要确保每封信的来源准确,那她就必须保管好n把公钥,这显然十分费劲。但引入CA之后,苏珊就只需要保管好CA的公钥就行了,这样就轻松了很多