关于数字签名和URL签名

数字签名

  其实数字签名的概念很简单。大家知道,要确保可靠通信,必须要解决两个问题:首先,要确定消息的来源确实是其申明的那个人;其次,要保证信息在传递的过程中不被第三方篡改,即使被篡改了,也可以发觉出来。所谓数字签名,就是为了解决这两个问题而产生的,它是对前面提到的非对称加密技术与数字摘要技术的一个具体的应用。

  对于消息的发送者来说,先要生成一对公私钥对,将公钥给消息的接收者。如果消息的发送者有一天想给消息接收者发消息,在发送的信息中,除了要包含原始的消息外,还要加上另外一段消息。这段消息通过如下两步生成:
  1、对要发送的原始消息提取消息摘要;
  2、对提取的信息摘要用自己的私钥加密。
通过这两步得出的消息,就是所谓的原始信息的数字签名。
而对于信息的接收者来说,他所收到的信息,将包含两个部分,一是原始的消息内容,二是附加的那段数字签名。他将通过以下三步来验证消息的真伪:
  1、对原始消息部分提取消息摘要,注意这里使用的消息摘要算法要和发送方使用的一致;
  2、对附加上的那段数字签名,使用预先得到的公钥解密;
  3、比较前两步所得到的两段消息是否一致。如果一致,则表明消息确实是期望的发送者发的,且内容没有被篡改过;相反,如果不一致,则表明传送的过程中一定出了问题,消息不可信。

  数字签名证实了一份数字信息确实来自于某个实体。因为基于非对称加密的原理,用私钥加密的消息只能用对应的公钥解密,反之亦然。签名由客户端A的私钥A生成,而私钥A只由签名方持有。服务端只能用签名方的公钥A对签名进行解密。当解密成功时,便可相信是签名方生成了此消息。

 

URL签名
原理:用户登录后向服务器提供用户认证信息(如账户和密码),服务器认证完后给客户端返回一个Token令牌,当用户再次获取信息时,带上此令牌,如果令牌正确,则返回数据。对于获取Token信息后,访问相关接口,客户端请求的url需要带上如下参数:
  时间戳:timestamp
  Token令牌:token
然后对时间戳和token拼接排序,用私钥进行非对称加密生成sign签名,连同前面的一起发给服务端。服务端通过客户端的公钥来解密,从而来验证数据来源的真实性。

posted @ 2020-01-12 21:10  天青色wy  阅读(1575)  评论(0编辑  收藏  举报