常见的加密算法可以分成三类:对称加密算法,非对称加密算法和Hash加密算法
-
对称加密算法的加密与解密 密钥相同
-
非对称加密算法的加密密钥与解密 密钥不同
-
Hash加密 不需要密钥,是一种单向算法
加密与解密
加密:对原来为 明文 的文件或数据按 某种算法 进行处理,使其成为 不可读 的一段代码,通常称为 “密文”。
解密:加密 的 逆过程 ,即将该 密文 转化为其 原来数据 的过程。
对称加密
优点:算法公开、计算量小、加密速度和效率高
缺点:密钥单一、密钥管理困难
常见对称加密算法:DES、3DES、AES、Blowfish
-
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
-
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次DES加密,强度更高。
-
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
-
Blowfish:是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。
DES
DES
加密算法是一种 分组密码,以 64
位为 分组对数据 加密,它的 密钥长度 是 56
位,加密解密 用 同一算法。
DES
加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES
加密算法加密的密文数据。因此,破译 DES
加密算法实际上就是 搜索密钥的编码。对于 56
位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56
次。
3DES
是基于 DES
的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高。
AES
AES
加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128
位、 192
位、256
位,分组长度 128
位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。
AES
本身就是为了取代 DES
的,AES
具有更好的 安全性、效率 和 灵活性。
Blowfish
Blowfish算法是一种对称的分组加密算法,算法核心在于子密钥生成,它将变长密钥扩展成总长4168 Byte的子密钥数组。算法中使用了大量的子密钥,而子密钥又依赖于用户密钥,实际加/解密过程中使用的是更新后的子密钥数组,子密钥即P数组和S盒。Blowfish算法有一个核心加密函数:BF_En(),该函数的输人是64位明文信息,经过运算,以64位密文信息的形式输出。用Blowfish算法加密信息,需要两个过程:密钥预处理和信息加密。同样,解密亦需要两个过程,密钥预处理和信息解密。
Blowfish算法的源密钥——pbox和sbox是固定的,而我们要加密一个信息,需要自己选择一个key,用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。解密亦是如此,由于Blowfish是对称加密算法,解密方在得到key后根据key生成解密所需的key_box和key_sbox。对同一个信息加密解密,选取的key的不同会导致密文的不同。因此,Blowfish算法的关键在于key的选择以及保密。
非对称加密
加密与解密特点:
-
如果使用 公钥 对数据 进行加密,只有用对应的 私钥 才能 进行解密。
-
如果使用 私钥 对数据 进行加密,只有用对应的 公钥 才能 进行解密。
常见非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
-
RSA:基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名。
-
DSA:数字签名算法,仅能用于签名,不能用于加解密。
-
ECC:椭圆曲线密码编码学。
-
ELGamal:利用离散对数的原理对数据进行加解密或数据签名,其速度是最慢的。
RSA
RSA
加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA
是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO
推荐为公钥数据加密标准。
RSA
加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。
DSA
处理过程: (采用双重加密)
(1)使用SHA编码将发送文件加密产生128bit的数字摘要;
(2)发送方用自己的专用密钥对摘要再加密,形成数字签名;
(3)将原文和加密的摘要同时传给对方;
(4)接受方用发送方的公共密钥对摘要解密,同时对收到的文件用SHA编码加密产生同一摘要;
(5)将解密后的摘要和收到的文件在接受方重新加密产生的摘要相互对比,如果两者一致,则说明在传送过程中信息没有破坏和篡改。否则,则说明信息已经失去安全性和保密性。
ECC
ECC
也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA
加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA
算法,该算法对 CPU
消耗严重)。
ELGamal
Hash加密
Hash算法是一种单向算法,通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法:SHA-1、MD5、HMAC
-
MD5:对一段信息产生 消息摘要,输出长度为
128bits
的一个串 -
SHA-1:对于长度小于
2 ^ 64
位的消息,SHA1
会产生一个160
位的 消息摘要 -
HMAC:运算利用 哈希算法 (
MD5
、SHA1
等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。
MD5
MD5
用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5
不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5
都会输出长度为 128bits
的一个串 (通常用 16
进制 表示为 32
个字符)。
SHA-1
SHA1
是和 MD5
一样流行的 消息摘要算法,然而 SHA1
比 MD5
的 安全性更强。对于长度小于 2 ^ 64
位的消息,SHA1
会产生一个 160
位的 消息摘要。基于 MD5
、SHA1
的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。
HMAC
HMAC
是密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC
运算利用 哈希算法 (MD5
、SHA1
等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。
HMAC
发送方 和 接收方 都有的 key
进行计算,而没有这把 key
的第三方,则是 无法计算 出正确的 散列值的,这样就可以 防止数据被篡改。
加密算法比较
加密算法 | 密钥管理 | 安全性 | 加密速度 | 应用 |
---|---|---|---|---|
对称算法 | 难 | 中 | 快几个数量级 | 大数据量加解密 |
非对称算法 | 容易 | 高 | 慢 | 小数据量加解密 |
散列算法比较
名称 | 安全性 | 速度 | |
---|---|---|---|
SHA-1 | 高 | 慢 | |
MD5 | 中 | 快 |
对称加密算法比较
名称 | 密钥名称 | 运行速度 | 安全性 | 资源消耗 |
---|---|---|---|---|
DES | 56位 | 较快 | 低 | 中 |
3DES | 112位或168位 | 慢 | 中 | 高 |
AES | 128、192、256位 | 快 | 高 | 低 |
非对称加密算法比较
名称 | 成熟度 | 安全性 | 运算速度 | 资源消耗 |
---|---|---|---|---|
RSA | 高 | 高 | 中 | 中 |
ECC | 高 | 高 | 慢 | 高 |