~~~~ 本文主要介绍几种分类的加密算法,以及各个分类算法的典型算法。肯定不全主要是摘要几种常用的,仅供自己以后查看
摘要算法
~~~~
消息经过散列函数处理后,获得唯一的散列值这一过程称为“消息摘要”,因此该类算法也可以称为散列算法。
~~~~
比较常用的比如:MD算法家族,SHA算法家族。。。
- MD算法家族
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
首先需要填补信息以确保信息的比特位长度减去448后能被512整除(信息比特位长度mod 512 = 448)。也就是说数据补位后,其位数长度只差64位(bit)就是512的整数倍。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位damgard/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理- SHA算法家族
SHA算法是基于MD4算法,作为MD算法的继任者的。SHA与MD算法的不同之处主要是摘要长度,SHA的摘要长度更长,安全性更高。
- SHA算法家族
对称加密算
~~~~
加密解密使用同一套密钥,这就是对称加密算法的核心。
~~~~
根据加密方式又分为密码和分组密码,分组密码的工作模式包括:ECB,CBC,CFB,OFB和CTR等。密钥的长度决定了算法的安全性。
~~~~
比较常见的比如:DES,AES等
- DES
DES算法为密码体制中的对称密码体制。首先明文根据分组模式,按64位进行分组,形成明文组,然后和密钥64位中的56位按位替代或交换的方法形成密文组 - AES
AES不是将拿到的明文一次性加密,而是分组加密,就是先将明文切分成长度相等的块,每块大小128bit,再对每一小块进行加密并不是所有的原始明文串能被等分成128bit,例如原串大小200bit,那么第二个块只有72bit,所以就需要对第二个块进行填充处理,让第二个块的大小达到128bit。- 常见的填充模式有:
~~~~ NoPadding:不进行填充,要求原始加密串大小必须是128bit的整数倍;
~~~~ PKCS5Padding:假设块大小8字节,如果这个块跟8字节还差n个字节,那么就在原始块填充n,直到满8字节;
~~~~ PKCS7Padding:跟PKCS5Padding的填充方式一样,不同的是,PKCS5Padding只是对8字节的进行填充,PKCS7Padding可以对1~256字节大小的block进行填充; - AES有多种加密模式,包括:ECB,CBC,CTR,OCF,CFB,最常见的还是ECB和CBC模式。
~~~~ ECB模式:每个块进行独立加密,块与块之间加密互不影响,这样就能并行,效率高。如果两个块的明文一模一样,那么加密出来的东西也一模一样。
~~~~ CBC模式:引入了一个新的概念,初始向量iv。iv的作用就是为了防止同样的明文块被加密成同样的内容。原理是第一个明文块跟初始向量做异或后加密,第二个块跟第一个密文块做异或再加密,依次类推,避免了同样的块被加密成同样的内容。
- 常见的填充模式有:
非对称加密算
~~~~
非对称加密算法与对称加密算法的主要区别在于非对称加密的算法用于加密和解密的密钥不相同,一个公钥(公开),一个密钥(保密),公钥加密数据只有使用私钥能解密,反之私钥加密,只可使用公钥解密。
~~~~
非对称加密算法源于DH算法(密钥交换算法)。比较常见分为两类,一类:基于大数因子分解数学难题典型非对称加密算法:RSA;一类:基于离散对数问题的常用非对称加密算法:ElGamal
数字签名算法
~~~~
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且密钥包括公钥跟私钥。可以说数字签名算法是非对称加密算法和消息摘要算法的结合体。
~~~~
数字签名算法包括签名和验证两项操作,遵循“私钥签名,公钥验证”的签名验证方式。因此,我们可以把数字签名算法看成是一种附加公钥和私钥的消息摘要算法。
~~~~
数字签名算法主要包括RSA,DSA,ECDSA三种算法。RSA即是非对称算法中的经典,也是数字签名算法中的经典。