数字签名和验签

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!


数字签名

数字签名使用了公钥加密领域的技术;通常定义两种互补的运算,一个用于签名,另一个用于验证。

数字签名是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串标明这段信息是发送者发送的。

数字签名是非对称密钥加密技术与数字摘要技术的应用。

数字签名的作用:

保证信息传输的完整性(数字摘要)
确认发送者的身份认证、防止交易中的抵赖发生(非对称密钥加密技术)

数字签名过程:

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。

接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

数字签名和验签的特点和过程

数字签名主要用于验证被签数据在传输过程中是否被篡改
包含加密算法(encryption)和摘要算法(digest)
摘要算法包括MD族和SHA族,特点是变长输入,定长输出,输出即为目标数据的摘要
加密使用RSA非对称算法,包括公钥和私钥,私钥对消息(Message)进行加密,公钥对数据和签名进行解密

数字签名过程(代码级):

  1. 利用哈希算法生成摘要。

SHA1会生成160bit(20字节)的hash值;OpenSSL还支持SHA224, SHA256, SHA384, SHA512, MD4, MD5等算法

  1. 填充hash值

填充值加在生成的hash值之前,openssl中默认是PKCS1。

填充后的摘要长度等于消息长度。

  1. 利用私钥进行签名。

验签过程(代码级):

  1. 利用公钥进行验签。

  2. 移除Padding

  3. 得到的hash值对比消息的hash值

原文始发于微信公众号(帝都小崔Cayden):数字签名和验签