编码、加密、摘要算法的区别

317 阅读3分钟

前几天面试被锤了,被问到编码、加密、摘要的区别,无奈鼠鼠我呀,只能区别加密和摘要算法= =,因此做个记录。
编码编码是为了转变格式,转变成程序所规定的编码,比如URL编码,我们不希望URL存在空格参数(因为http协议中以空格和回车分界,所以当URL参数上存在一个空格,而此时它不是分界,需要将空格进行编码以至于不被当成分界),它的对立面是解码。


加密:加密是将一串字符串根据特定的加密算法和加密密钥转变成一串读不懂的字符串,对立面是解密。加密是希望无法被每个人解密的,只有持有密钥的双方才能加解密。
加密方式包括对称加密非对称加密
1.对称加密:对称加密只有一个密钥,持有密钥双方使用这个密钥对字符串进行加密。

  • 使用场景:https协议在SSL连接后,使用会话密钥进行对称加密,保证消息的机密性

2.非对称加密:非对称加密加密双方生成一个密钥对(即公钥和私钥)对信息进行加解密,但加解密过程中相对于对称加密来说更慢,公钥可以随意公布,而私钥不能随意公布。而公钥可以加密也可以解密,但其中有一些区别:

  • 公钥加密,私钥解密:公钥加密的信息,只有私钥能解开,可以保证信息的安全性
    使用场景:比如SSL连接的第三次握手中第三个随机数的传输,客户端使用服务端的公钥对第三个随机数进行加密,在服务端中用服务端私钥对传来的加密信息进行解密,保证第三个随机数只有通信双方可知。
  • 私钥加密,公钥解密:只要是私钥加密的信息公钥就能解开,而公钥可以随意发布,所以可以保证信息来源的可靠性
    使用场景:比如CA机构在生成证书签名时,使用私钥加密摘要,在验签的时候,使用公钥对证书签名进行解密。

摘要算法:摘要就是哈希值,摘要算法是单向散列算法,也就是我们常说的hash算法,回顾一下在hashmap中key和hashcode的关系:

  • 相同的key得到的hashcode一定相等。
  • 相同的hashcode所用的key可能不同。(哈希冲突)

这里也同理,摘要算法是单向的。摘要算法一般用来验证内容的完整性,即验证内容和摘要,将内容使用同样的摘要算法,得到的摘要与原来的摘要做对比,如果相等则说明内容完整,否则说明内容被篡改。
使用场景:SSL连接第三次握手中,验证数字证书时,将公钥解密出来的内容,与数字证书中所带的证书信息的摘要做对比,如果相等说明证书信息没有被篡改,保证了数字证书的完整性