公钥加密

各种加密方法大体可以分成两类,一类是对称加密,另一类是非对称加密。

凯撒密码是对称加密中的一种,他的加密方法是把A变成B,把B变成C,于是解密的时候只要把字母替换回来就行了。也就是说,任何知道加密方法的人就可以解密。

RSA是一种非对称加密算法,他的特点是任何人都可以加密,但只有我可以解密。做个比喻,人人都可以把锁头扣上,但只有拥有钥匙的人可以开锁。这个分发出去的用于加密的东西叫做公钥,也被称作证书。而留在自己身边的“钥匙”就是私钥,是绝对不能被第二个人拿到的。

于是乎,你可以把公钥发给别人,别人把数据用你的公钥加密后传给你,你用私钥解密后阅读。在这个过程中,任何人截取到数据都是无效的,因为它没有你的私钥。

RSA还有一个特点,就是可以用私钥加密,用公钥解密。你会问,公钥人人都能拿到,相当于人人都能解密,那这样加密有什么意义呢?意义在于,它可以作为身份验证。用私钥加密的过程叫签名,而验证签名就是用对应的公钥解密。因为为只有用对应的私钥签名的文件才能用公钥解密,既然它可以用公钥解密,就一定是由对应私钥签署的,而私钥只有你有,于是这份文件就一定是你发布的。网络上的HTTPS就是依靠着个。一般来说,用私钥加密的都是MD5、SHA1 之类的,加密原文太耗系统资源。

对付这种非对称的加密方式,有一种叫做“中间人攻击”的攻击方法,它会使双方之间的通信完全暴露。我就偷懒不写了,大家自己找资料。