非对称加密算法需要两个密钥: 公开密钥 和 私有密钥。 公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。

甲方 生成一对密钥,将公钥公开,需要向甲方发送信息的其他角色(乙方)使用公钥对机密信息进行加密之后发送给甲方。甲方再利用自己的私钥对加密后的信息进行解密

私钥签名令牌  公钥验证 (项目中的JWT原理)

  • 张三有两把钥匙,一把是公钥,另一把是私钥。
  • 张三把公钥送给他的朋友们----李四、王五、赵六----每人一把。
  • 李四要给张三写一封保密的信。她写完后用张三的公钥加密,就可以达到保密的效果。

java 源码非对称加密 jwt非对称加密_加密解密

  • 李四要给张三写一封保密的信。她写完后用张三的公钥加密,就可以达到保密的效果
  • 张三收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要张三的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

重点是:张三给李四回信

张三给李四回信,决定采用"数字签名",注:这个过程就是JWT的签名防篡改。他写完后先用Hash函数,生成信件的摘要(digest)。张三将这个签名,附在信件下面,一起发给李四


java 源码非对称加密 jwt非对称加密_加密解密_02

李四收信后,取下数字签名,用张三的公钥解密,得到信件的摘要。由此证明,这封信确实是张三发出的。李四再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一

致,就证明这封信未被修改过。


java 源码非对称加密 jwt非对称加密_加密解密_03

传统的:

题外话: 当用户拿着从授权服务得到的token去访问资源服务器,资源服务器是将token返回给授权服务验证,验证token是否合法

java 源码非对称加密 jwt非对称加密_加密解密_04

 

这样就会导致,大量的从资源服务器到授权服务器的请求,如何优化呢?就是采用的非对称加密

java 源码非对称加密 jwt非对称加密_源服务器_05

 

jwt的组成:

  1. 头部
  2. 载荷
  3. 签证(核心点)

更新后:采用了非对称加密算法之后的访问 == > 减少了资源服务器和授权服务器之间的频繁的验证

java 源码非对称加密 jwt非对称加密_jwt_06

使用私钥,注意这里授权服务是使用私钥生成jwt令牌的签名部分,防止jwt被篡改

资源服务器 可以使用公钥对令牌进行 合+

法性的校验

所以说:公钥和私钥的作用不只是:公钥进行加密,私钥进行解密。我们还可以利用私钥进行签名,生成令牌,然后公钥 校验令牌签证的合法性