加密算法主要分为两大类:对称加密和非对称加密

对称加密算法

 发送者和接受者共享相同的密钥,密钥长度一般在40-256bit之间。

 常见的对称加密算法有DES3DESAESRC4

 DES(DataEncryption Standard),于1975年由IBM开发,使用固定56bit长度的密钥,基于加密密钥进  行一系列的移换位操作,由于只是使用了简单的逻辑操作,很容易使用硬件实现加速

 DES有两种模式的块加密方式:

  1ECB mode(Electronic CodeBook,电子密码本)

      相同的明文产生相同的密文;这种模式容易遭受字典***

  2CBC mode(Cipher Block Chaining,加密块链接)

     加密前,将当前的明文块与一个IV字段进行异或操作  

wKiom1ceI_vgpcTmAAHGuCCl9yo745.png


  3DES(Triple DES),基于DES,密钥长度放大3倍,168bit长度;算法强度更好


  AES(Advanced Encryption Standard),在密码学中又称Rijndael加密法,但AES和Rijndael又不尽相同,Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。AES的软件和硬件运行效率均非常高,广泛用于对无线和语音的加密

对称加密的特点:

 1、对称加密算法加密数据速度快,而且紧凑

 2、明文传输共享密钥,容易出现中途挟持和窃听的问题

 3、密钥数量以参与者平方的速度增长,当数量过多时,不便管理和储存

 4、不支持数字签名和检验数据的不可否认性

非对称加密算法

   使用一对密钥进行加密和解密,这一对密钥为公钥和私钥,用其中一个密钥加密的数据只能用另一个密钥来解密,密钥长度一般在512-2048bit之间,非对称加密算法的加密速度较慢,一般用来加密很小的数据,两大用途:数字签名和密钥交换.

             在一对密钥中,公钥可由私钥导出,但公钥无法导出私钥

             发送方用自己的私钥加密数据,可以实现身份验证

             发送方用对方的公钥加密数据,可以保证数据机密性

 常用的非对称加密算法有RSA、DSA、ECC

   RSA:由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的


RSA加密解密过程

 wKioL1ceJO_xZzvlAAGEiBPhONI180.png


DSA是一种标准的数字签名算法

ECC与RSA相比,有极大的优势,主要表现在:

  1、抗***性更强

  2、计算量小,处理速度快

  3、存储空间占用小

 

散列算法

 散列算法是对数据进行提炼,生成数据的特征码,保证数据的完整性

 散列算法的特点

     1.    固定大小

      散列函数可以接收任意大小的数据,但输出的散列值长度是固定的

     2.    雪崩效应

      原始数据就算修改一个bit,计算得到的散列值也会发生巨大的改变

     3.    单向性

      只能从原始数据计算得到散列值,无法从散列值求出原始数据

     4.    冲突避免

       两个不同数据计算得到的散列值必然不相同

常见的散列算法

    MD5,一种单向散列算法,非可逆,相同的明文产生相同的密文。使用128bit固定输出

 SHA-1,可以对任意长度的数据运算生成一个160位的数值,与MD5相比,SHA-1具有更强的安全性,但运行速度比MD5慢


DH 协议(Diffie-Hellman) 

 DH协议是一种密钥协商协议,通信双方不在互联网上直接传送密钥,而是经过一系列数据的交换,最后计算出双方共享的密钥,大大提高的通信的安全性

 原理:

  DH基于大素数的数学难题:现有g b p三个数,其中c为一个大素数,则已知p、g和g^b%p无法推出b。


  1. A、B通信双方约定一个初始数g和一个大素数p

  2. A生成一个保密的随机数x,并计算g^x%p

  3. 将g^x%p的值发送给B

  4. B生成一个保密的随机数y,并计算g^y%p

  5. B将g^y%p的值发送给A

  6. A计算(g^y%p)^x的值并将其作为通信的密钥

    B计算(g^x%p)^y的值并将其作为通信的密钥


 在整个密钥协商的过程中,g、p、g^x%p、g^y%p是公开的,而x、y是保密的,所以第三方无法计算出密钥

 

在互联网中,通信过程一般有下面2种:

 一、

  1.   A和B拿到彼此的公钥

  2.         双方通过DH协商产生密钥

  3.      A通过计算产生要发送数据的特征码,用自身私钥加密特征码

  4.      用经过协商得到的对称密钥加密数据和特征码,保证了通信的私密性、完整性和身份验证


 二、

  1.   A和B拿到彼此的公钥;

  2.      A通过计算产生要发送数据的特征码,用自身私钥加密特征码

  3.      用随机数加密数据和特征码

  4.      用B的公钥加密随机数,一并打包发送到b,保证了通信的私密性、完整性和身份验证