加密的目的是防止在传输过程中,数据被泄露
签名的目的是防止在传输过程中,数据被篡改
非对称加密算法(如RSA)正确的使用方法是:
1.1 公钥加密,私钥解密。(防止数据泄露)
1.2私钥签名,公钥验签。(防止数据篡改)
1.1 公钥加密,私钥解密。
私钥和公钥的关系,相当于钥匙和锁的关系。
私钥=钥匙,公钥=锁,私钥只有一把自己保存,而公钥锁可以复制很多把
你女朋友给你发送信件时,把你的锁(公钥)给她,让她把信件锁起来(加密)后发给你,你再拿你的钥匙(私钥)去解密,得到的信件可以证明这是你女朋友传过来的(防止数据被泄露)
1.2私钥签名,公钥验签。
同样的例子,你给你女朋友写信,为了证明这封信的内容是你写的,你需要给你的信加上一个签名,其方法是:通过哈希算法对信件进行摘要,将摘要用你的私钥进行签名(私钥签名),如果有人篡改了信件,则摘要一定会不同,你将签名后的摘要和信件一同发出,你女朋友在收到摘要和签名后,使用你之前给的公钥及约定好的哈希算法对摘要进行解密(公钥验签),得到解密后的摘要,用同样的方法对发送来的信件也提取出摘要,两个摘要一对比,相同的话则说明数据是你想要发的内容(防止数据被篡改)
在这个例子中,对数据进行了签名,但在传输过程中没有对数据加密,即不能保证这个数据是你发出的
也就是说,签名与加密完全是两个概念,也不是必须一起都实现才安全,要根据需求而定。
例如,我传输了一个下单信息:买一杯奶茶,这个信息并不是什么机密,但是要防止被人篡改改成:买2杯可乐,所以只需要对内容做签名防篡改就可以了,并不需要加密。
参考