之前咱们还只是聊聊QQ,看看网页,通讯安全彷佛并不为人所重视,而现现在电子商务已经极为普及,咱们在网上的生活也已经很是丰富和重要,所以对账户的安全,信息的保密便愈来愈重视。对信息进行加密是保证通讯安全的最为基本也是最为重要的手段之一。最近的项目正好涉及到通讯安全相关的内容,因此也学习一些入门的基本知识。算法
明文就是咱们真正想要通讯的信息,这些信息要不就是人类可读的,要不就是有明显意义,容易理解的。在电子通讯的过程当中,不管是有线仍是无线的方式,数据经过各类媒介到达对方的过程当中很容易就能够被别人获取到。若是对于咱们发送的信息不加任何变化,那么对方获取到以后不费力就能够彻底了解了通讯的内容(好比咱们的账户和密码,还有你和MM聊的那些肉麻的话)。为了防止本身的信息彻底裸露在别人面前,就须要对信息进行加密。加密就是把明文以某种方式变换成一堆看起来乱七八糟的数据--密文,再把密文发给对方,对方收到以后,用对应的方法再用相应的方法再数据还原成明文(解密)。对信息进行加密的步骤就是加密算法。安全
有些算法自己,除了要输入明文以外,还须要输入另外一个专门的数据(密钥)才能输出密文。现代的加密系统,通常都由加密算法和密钥组成。没有密钥的加密系统也是有的,但保密性和实用性相对来讲比较差。好比一旦组织中有人离开,那么全部人都要更换加密算法,不然安全性就没法保证了。而带密钥的加密系统解决了这个问题。由于即便算法公开,没有密钥也没法解密密文信息,而密钥的更换比算法的更换要容易得多。学习
带密钥的加密算法通常分为两类:对称加密算法和非对称加密算法。网站
对称加密算法是指加密和解密使用相同,或是关连性很强的密钥。对称加密算法速度比较快,比较适合在大量数据加密的状况下使用。但对称加密要求通讯双方能共享同一密钥,并对密钥进行严格地保护,不然密钥泄漏了,信息就被破解了。但在互联网的环境下,要达到这个要求是很难的。由于通讯的对象多种多样,几乎不可能作到方便地共享同一密钥而鲜为人知。由于毕竟通讯的双方极可能以前彻底没有见接触过,是第一次通讯,而他们的通讯信息又但愿被加密,好比我第一次登陆亚马逊的网站买东西,那么如何与亚马逊共享同一密钥来保证个人账户和密码的安全呢?对密钥自己已经没法加密了(对方根本没法解密)。把密钥发给对方,那就至关于也把密钥告诉了窃听者。因此共享密钥,同时对密钥严格保护,在现实中是很是困难的。加密
为了解决对称加密算法的问题,牛X的人发明了非对称加密算法。在非对称加密算法中,存在两个密钥。一个是加密密钥(e),一个解密密钥(d)。经过 e 对明文加密获得的密文,只有用 d 来解密出来还原成明文。并且算法自己能够保证,就算你知道 e ,想要获得 d 也是很是很是困难的。既然有这种特性,那么咱们就能够这样作:我把加密密钥公布出去(发给通讯的对方 A)。A 收到密钥 e 之后,用 e 对他要发送的信息(M)进行加密获得密文 C 发送给我,我再使用解密密钥 d 把密文解密,还原成 M。在这个过程当中,我并不担忧第三方的窃听者窃听咱们的通讯过程,由于就算他有了 e,也没法使用 e 来解密 C。除了解密密钥 d 的拥有者(我)以外,谁都没法解密。这样,我只要保证 d 的只有我知道(这个相对容易作到),就能够保证通讯的安全。对象
不过,这世上没有彻头彻尾的绝望,也没有十全十美的事情。非对称加密算法通常都比较慢,须要耗费比较多的计算时间,并不适合用在大量的数据加密上。为了保证安全性,同时又下降计算上的需求,通常的通讯应用都会结合使用对称加密算法和非对称加密算法。即,在通讯的开始,先用非对称加密算法交换对称加密算法的密钥,以后再用对称加密算法进行通讯。blog
后面的博文中将会陆续学习一些非对称加密和对称加密和算法。get