(一)对称加密(SymmetricCryptography)

   对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

 

(二)非对称加密(AsymmetricCryptography)

   与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法。

典型的RSA非对称加密。

 

  RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MIT)的三位学着:Ron Rivest、Adi Shamir 和 Leonard Adleman共同提出,RSA的取名也来自他们三个人的名字。

 

  它的原理较为简单,我们假设有消息发送方A和消息接收方B,通过下面的几个步骤,我们就可以完成消息的加密传递:

  消息发送方A在本地构建密钥对,公钥和私钥;

  消息发送方A将产生的公钥发送给消息接收方B;

  B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;

  反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。

  由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。

 

  如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。

 

  当然,这种方式可能存在数据传递被模拟的隐患,我们可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。

 

(三)SSH加密原理

  首先声明一下,这里所说的SSH,并不是Java传统的三大框架,而是一种建立在应用层和传输层基础上的安全外壳协议,远程连接Linux服务器的时候,会经常用到一 个叫SSH SecureCRT的连接工具。在SSH安全协议的原理中, 是一种非对称加密与对称加密算法的结合,先看下图:

 

非对称加密算法举例 非对称加密算法的含义_客户端

 

  1、首先服务端会通过非对称加密,产生一个公钥和私钥;

  2、在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥可以被任意暴露;

  3、客户端在获取公钥后,会先产生一个由256位随机数字组成的会话密钥,这里称为口令;

  4、客户端通过公钥将这个口令加密,发送给服务器端;

  5、服务器端通过私钥进行解密,获取到通讯口令;

  6、之后,客户端和服务端的信息传递,都通过这个口令进行对称的加密。

 

  这样的设计在一定程度上提高了加解密的效率,不过,与客户端服务端各构建一套密钥对的加解密方式相比,在安全性上可能有所下降。在上面所述的通过口令进行加密的过程中,数据也是可以被窃听的,不过由于密钥是256个随机数字,有10的256次方中组合方式,所以破解难度也很大,相对还是比较安全的。