昨天股票涨的好,大家看文章的心情也很好啊,看到昨日阅读量创下新高,今日提笔也是感到压力山大啊,产品和开发之间总有说不完的话题,想必好多产品也在悄悄掰着指头数着开发惹恼产品的N句话,好了,这个话题我们改天接着聊,今天还是继续说说技术上的事——加密。
产品童鞋应该经常会从开发那里听到什么密钥,公钥,私钥什么的,虽然可能不太清楚具体是神马,但是应该都知道是用来加密传输的信息的,如果知道了加密的原理,就不会被这看似神秘的词儿给绕晕了,被忽悠的概略也会大大降低。
加密这个东西由来已久,例如古代的藏头诗就是文艺气息爆表的加密技术,作者想真正表达的文字信息被按照一定规则放在诗句的各个位置,我们可以把这个规则叫做加密算法。如果大家都不知道藏头诗的加密算法,那写首藏头诗把皇帝骂一通,那也没啥可怕的,事实上这样做的人都挂了,原因当然显而易见,加密算法被破解了呗,谁不知道你在说啥啊!
从上面的例子可以看到现代加密的雏形,对明文信息按照一定的算法进行打乱重排,如果能将加密算法完美隐藏起来,那么这个加密就是安全的,但是这只是如果,事实上这种将加密算法隐藏起来的做法是不安全的,一旦算法被泄漏,加密就毫无意义,如果要继续加密就得设计新的算法,这个成本实在太高,所以现代的加密技术则包含另外一个元素——密钥。
密钥是啥呢,其实就是一堆参数,现代信息的加密就是把这堆参数跟明文信息按照一定的算法混到一起,把原始信息整的像乱码一样。重新设计加密算法不是成本高吗,与其偷偷摸摸的,不如公开加密算法,让大家都来用好了,但是加解密双方得保管好密钥哦。不过即使不幸密钥被泄漏了,重新整个密钥就好了,这比重新设计算法可容易多了。
说完加密技术中加密算法和密钥这两大元素,我们再来看看常见的两种加密:对称加密和非对称加密。对称加密目前比较流行的是AES和3DES,在这种加密方式下,加解密双方的密钥是一样的,双方都用这个密钥来加密,也用这个密钥来解密的,简单粗暴,如果加密要求不是那么高的话,用对称加密就可以了,因为加密很大程度上是为了避免私密信息在网络上裸奔,信息在网络上传输通过的节点实在太多,很容易被人中途拦截,虽然对称加密也是能破解的,不过票价还是偏高,而且破解出来也不一定有啥值回票价的信息,所以也还算比较安全。
如果有更高的加密要求,就要用到非对称加密了,比较流行的是RSA加密。为啥又要搞个非对称加密呢?这里先从对称加密的弊端说起,对称加密的密钥只有一个,加密解密都用它,这就意味着密钥会被多方知晓,密钥泄漏的可能性也越大,一旦泄漏,任何人都能对数据进行加解密,如果进行多方加密通讯,又不想相同密钥被太多人知道,则需要针对不同的通讯方生成不同的密钥,既复杂又不环保。非对称加密则能比较好的解决这个问题,非对称加密的密钥是一对,分别叫做公钥和私钥,这两个密钥是不一样的,而且不可能根据其中一个密钥推导出另一个密钥的。公钥加密的数据只有私钥能解开,私钥加密的数据只有公钥能解开。例如A创建了一对非对称加密的密钥,A对外公开了其中一个密钥称为公钥,A自己保有的另一个密钥称为私钥,这样做的好处是:和A通讯的对象不论一个还是多个,都只需要使用一个公钥加密就好了,而且即使是公钥加密的数据用公钥也是解密不了的,而私钥只有A自己有,这样就不用太担心私钥泄漏的问题了。
非对称加密的另一个应用场景是身份认证,如果A拥有私钥,那么A只要声明公钥是自己发布的,那么如果接收方B收到了一份自称是A发的密文时,B只需要将A发布的公钥尝试解密一次就可以知道了,如果解开了,那么就可以确认是A发的密文,没解开自然就不是喽。平时我们听到的啥数字签名,数字证书啥的用来验证身份的其实就是这玩意儿。