此篇是看 数字签名是什么? 的理解与笔记html
1. 使用非对称密钥发送数据到服务器。 发送方(C端)使用公钥对本身的数据进行加密,接收方(S端)使用私钥解密,即便发送出去的数据被拦截到,也不知道明文是什么,由于使用公钥加密的数据只有私钥才能解开
好比用户注册的时候,为了保护用户的密码不被泄露,在C端用公钥对密码进行加密,在S端用私钥解密, 而后S端返回一个明文信息给C端git
2. 针对第一步S端发给C端的明文信息,若是被黑客拦截篡改,那么C端是不知道的。好比S端返回给C端的信息是 "注册成功!" 而被篡改为 "注册失败!" 这时C端是不知道的。
为了解决这个问题。S端先将数据进行hash运算,获得一个hash值(好比取MD5值),再将这个hash值用私钥加密,附加在明文信息的最后,便是数字签名
C端收到S端数据后,[1]取出后面的数字签名,[2]用公钥将数字签名解密,[3]对明文信息进行hash运算,[4]对比本身运算出来的hash值和数字签名解密出来的hash值是否一致,若是一致,表示数据没有篡改,不然,数据被篡改服务器
考虑上面的过程,若是S端发给C端的带数字签名的明文数据被黑客拦截,那么黑客没法作到在修改过明文信息后而不被C端发觉, 由于若是黑客修改明文,那么被篡改的数据的hash值与签名的hash值必定不一样,而黑客又没法对篡改过的数据进行数字签名,由于数字签名是用私钥对hash值加密,而黑客没有私钥。 数字签名是 [明文的hash值再用私钥加密获得的一组数据]加密