这个题目一写出来,笔者自己也思考了下自己在以前职业生涯中涉及到的加密解密技术,也思考了自己熟知的公知度高的几种加密方式。
下面我来说说一些理解上的东西。
加密解密中间参与的是一个算法,有这个算法规律你才可以将简单的语言或者数据转换成只有了解此算法的人才能看懂才能知道其本身含义的语言或者是数据,你做的这部分工作其实就是在加密,别人理解的过程就是解密。
定义:把一段原始数据通过某种算法处理成另外一种数据(原始数据为明文,处理后的数据为密文)。明文->密文:称之为加密。密文->明文:称之为解密。
从图中可以了解到对于加密、解密来讲算法是非常关键。但是公知度高的算法都是公开的,一旦有人想要PO解这个算法,而且能够被PO解了,则所有使用这个算法的产品都面临要报废、被DAO版的危机。而且很多的时候做过开发的人就知道,替换一个算法的成本很大。因此一个加密出来的数据本身可靠与否,取决于密钥,而不是算法,因为密钥的调换成本比较低。
那么问题来了,什么是密钥呢?
密钥是一种参数,它是在明文->密文或密文->明文的算法中输入的数据。分为对称密钥,非对称密钥。
顾名思义,对称加密又称为私钥加密,发送方和接收方使用同一个密钥区加密解密数据。优势是加解密速度快适合于对大数据进行加密。但是密钥管理困难。
非对称加密:又称公钥加密。需要使用不同的密钥来分别完成加密和解密操作。其中一个密钥公开发布,即为公钥。另一个由用户自己秘密保存,即为私钥。发送方用对方的公钥加密数据,对方用自己的私钥解密数据。缺点在于加密解密的速度比对称密钥慢很多。
关于算法这块现在也就上面提到的对称和非对称两类。在此简单阐述下。对称算法,即单向加密算法。
对称算法:
对称算法的缺点其实是很明显的,因为其加密解密使用的都是相同的密钥,那么在整个过程中密钥存储的安全性这块就需要好好考量方案。优点前面也说过了,在此不累述。
非对称算法:
从图中可以看到加密和解密用到的不是同一个密钥,发送方使用接收方的公钥进行加密,接收方使用与之配合的私钥进行解密,整个传送过程中,加密后的数据只用接收方自己可以解密,因为只有他自己拥有私钥。
相对来说非对称算法比较安全,但是在实际使用中总归是要考虑很多的情况,权衡所有的条件。因为归根结底没有哪种算法是绝对安全绝对完美的,所以读者可以在自己的产品保密方案中涉及到几种算法。
举个简单的例子:你可以把要传递给接收方的线路加密对称秘钥,用对非称算法加密以密文的方式传递给接收方,用公钥/私钥加密,相对应的就是私钥/公钥解密。线路数据加密可以使用对称算法加密数据。
把对称算法和非对称算法糅合到一起,可以保证数据的机密性,来源的合法性。但是数据本身的完整性又该如何解决?若是有非法截取,然后乱修改一通,破坏数据的完整性接收方又该如何判断呢?
此问题的提出就涉及到了另外一种加密算法,即单项加密算法。准确来说,单向加密算法并不是一种加密技术,而是通过提取数据特征码,来验证数据的完整性。在单项算法的设计上需要考虑的两个因素:雪崩现象和定长特征。雪崩现象:任何微小的变动都可以导致结果发生巨大的变化。定长特征:不论数据本身多长,提取的特征码的长度都是固定的。
上面提到的这三种算法如果读者在设计思路中有考虑并糅合在实际中使用。最终保证数据的完整性,可靠性,机密性以及来源的合法性。希望这篇整理能对于读者在理解算法的概念上有些帮助!