Pulpcode

捕获,搅碎,拼接,吞咽

0%

加密基础知识总结

其实一开始我们去学习加密解密知识的时候,往往先入为主,认为加密解密就是对数据在一端加密,传输后再到另一端去解密。
类似于“国王的秘密文件用类似凯撒密码这样的东西加密后给某个人”这样的剧情。

具体的加密手段还是要和具体的需求场景相联系起来。不过这背后的原因到底是因为加密是一个很泛的概念,还是因为以下讨论的部分技术本身就不算是加密。

摘要(指纹)

摘要算法就是我们常说的hash(哈希)算法,hash算法的特征是:

  1. 对于两个不同的数据,不会生成相同的指纹。(唯一性)
  2. 对于一个指纹,并不能逆推出它的原始数据。(不可逆性)

比较常见的hash算法就是md5和sha1了。

真实场景:

如果是密码之类的存储,仅仅hash是不够的,因为会有类似于彩虹表这样的东西来暴力破解,这时我们就需要原始数据中加入一些“料”,来加大逆推的难度。

使用场景:

A打算向B发送一段信息,为了保证此信息在传输过程中不会被修改,就会将信息M和此信息的指纹D打包发给它。B在接受到包后,会用hash算法将原信息M生成指纹D2,再去与发送来的指纹D做对比,如果相同,则说明原始数据未被篡改。数字签名就是来源于此,不过还需要私钥加密,保证这封信确实是A发来的。不过要注意的是,数字签名中的hash并不会加入料,此处hash的目的是因为如果将整个文件用私钥加密,代价太大,所以我们先hash,再对hash后的数据进行私钥加密(签名)。

哪天有个黑客潜入我们的数据库,将用户的密码全都盗走,这种事非常恐怖,因为大多数用户都是一个密码到处用。为了防止此事,我们并不将密码直接存入数据库,而是将hash后的值存入数据库,实际上并不是直接hash,而是加料后再去hash,这就是盐(salt)

签名

常见的签名算法有:DSA和RSA,签名算法的目的就是为了保证,这个信息确实来源于某处。比如你要从银行获取数据,就需要银行对数据签名,保证你收到的数据确实来源于银行,而不是一台伪造的主机。

签名算法可以生成一对非对称秘钥,被称为公钥和私钥,其中私钥用来加密,公钥用来解密。(RSA中生成的密钥对,还可以公钥加密,私钥解密,不过这就不是当做签名用,而是单纯的数据加密。)因为私钥只有“一把”,所以这样就可以保证数据确实是正确的来源。

加密

单秘钥加密

这种加密就是我们一开始所理解的那种加密了,只有一把钥匙,这把钥匙只能有通信双方知道。

这种加密很好的防止了数据被别人看见,或者被别人篡改。

但是由于采用同一个密钥进行加密解密,在多用户的情况下,密钥保管的安全性是一个问题,比如在一对多的场合,不如rsa带来的加密效果好用。

DES就是常见的单秘钥加密算法

非对称秘钥加密

前面也提到RSA不但可以用来做签名,也可以用来加密,(因为它可以用公钥加密,私钥解密。)这种便利尤其是一对多的场景下。