平时能够听到见到很多所谓的加密算法,但是自己对它们没有一个比较清楚的认识,所以必须理清一下。

分类

常见的加密算法可以分为三大类:

  1. 对称加密算法
  2. 非堆成加密算法
  3. 散列算法

1. 对称加密算法

对称加密指的是可以使用同一个密钥对内容进行加密和解密,相比非对称加密,它的特点是加/解密速度快,并且加密的内容长度几乎没有限制。

对称算法又可分为两类:

  • 序列算法或序列密码
  • 分组算法或分组密码

序列算法或序列密码:

一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。

分组算法或分组密码:

对明文的一组位进行运算(即运算之前将明文分为若干组,然后分别对每一组进行运算,这些位组称为分组),相应的算法称为分组算法或分组密码。

优点:

对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

缺点:

在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

应用:

保存用户手机号、身份证等敏感但能解密的信息。

常见的有如下算法:

  1. DES
  2. 3DES(Triple DES)
  3. AES

1.1 DES

DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为2的56次方。

1.2 3DES(Triple DES)

是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。

1.3 AES

AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,AES标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

2. 非对称加密算法

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

使用公钥加密的信息只能使用私钥解密:一般用来传输需要保密的信息。

使用私钥加密只能使用公钥解密:一般用来作数字签名,因为公钥对所有人公开的,可以用来确认这个信息是否是从私钥的拥有者发出的。

优点:

非对称加密与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。

缺点:

非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

应用:

一般用于签名和认证。

建议:

AES采用128为即可,RSA建议采用1024位的数字,ECC建议采用160位。RSA加密字符长度有限制,一般采用AES+RSA方式组合使用。

常见的有如下算法:

  1. RSA
  2. DSA
  3. ECC

RSA 和 DSA 的安全性及其它各方面性能相似,而 ECC 较之则有很多性能优越,包括处理速度、带宽要求、存储空间等。

2.1 RSA

RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

2.2 DSA

DSA是基于整数有限域离散对数难题的,DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。这一点,RSA算法做不到。

相比于RSA,DSA 只用于签名,而 RSA 可用于签名和加密。

2.3 ECC

椭圆加密算法,是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。

与RSA,DSA相比,ECC有以下优点:

  • 安全性高,有研究表示160位的椭圆密钥与1024位的RSA密钥安全性相同
  • 处理速度快,在私钥的加密解密速度上,ecc算法比RSA、DSA速度更快
  • 存储空间占用小
  • 带宽要求低

3. 散列算法

在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的“散列”或“消息摘要”(Message digest)。

将任意长度的二进制值映射为较短的固定长度的二进制值,这个短的二进制值称为哈希值,这个算法具有不可逆、碰撞低等特性。同时该类算法可以用作数字签名,用来证实某个信息确实是由某个人发出的,同时可以保证信息没有被修改。

实际上,简单来说,这种算法有两个特性:

  • 不同的输入一定得出不同的 hash 值;
  • 无法从 hash 值倒推出原来的输入。

数字签名通常先使用一个 Hash 函数或者消息摘要算法,获得可以唯一对应原信息的摘要信息,然后通过私钥加密。这样其它人就可以通过公钥解密摘要信息,然后使用同样的算法对接收到的信息计算摘要,如果两者获得的摘要信息相同即可。

在数据传输前,使用 MD5 和 SHA 算法需要发送和接收方在数据传送之前就知道密匙生成算法,而 HMAC 需要生成一个密匙,发送方用此密匙对数据进行摘要处理,接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。

常见的有如下算法:

  • MD5
  • SHA
  • HMAC

3.1 MD5

Message Digest Algorithm。

MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

MD5被广泛用于各种软件的密码认证和钥匙识别上。MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5的典型应用是对一段Message产生fingerprin指纹,以防止被“篡改”。如果再有—个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登陆认证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方。

3.2 SHA

Secure Hash Algorithm。

主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。有SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种单向散列算法,其中SHA-1已经不安全,后四种被统称为 SHA-2。

SHA-1是一个160位,即20个字节的散列值,通常呈现为40位16进制数。SHA-2实际上是一系列散列的“家族”,其长度各不相同,其中最受欢迎的是256位的。

3.3 HMAC

Hash Message Authentication Code,即散列消息鉴别码。

主要是利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。一般的,消息鉴别码用于验证传输于两个共 同享有一个密钥的单位之间的消息。HMAC 可以与任何迭代散列函数捆绑使用。MD5 和 SHA-1 就是这种散列函数。HMAC 还可以使用一个用于计算和确认消息鉴别值的密钥。

参考链接