文章中有参考整理其他一些有价值的博客以及官方文档的内容,如有侵权请联系删除。
加密和解密
加密:数据加密的基本过程,就是对原来为 明文 的文件或数据按 某种算法 进行处理,使其成为 不可读 的一段代码,通常称为 密文。通过这样的途径,来达到保护数据不被非法人窃取、阅读的目的。
解密:加密 的 逆过程 为 解密,即将该 编码信息 转化为其 原来数据 的过程。
加密算法可分为三类:对称加密算法、非对称加密算法、散列加密算法。
对称加密算法
对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。它是应用较早的加密算法,又称为 共享密钥加密算法。在 对称加密算法中,使用的密钥只有一个,发送和接收双方都使用这个密钥对数据进行加密和解密。这就要求加密和解密方事先都必须知道加密的密钥。
- 数据加密过程:在对称加密算法中,数据发送将明文 (原始数据)和加密密钥一起经过特殊加密处理,生成复杂的加密密文进行发送。
- 数据解密过程:数据接收方收到密文后,若想读取原数据,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。
对称加密算法用来对敏感数据等信息进行加密,常用的对称加密算法包括:
1、DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的密钥来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。
2、3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
3、AES(Advanced Encryption Standard):AES 本身就是为了取代 DES 的,AES 具有更好的安全性、效率和灵活性。 AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。
非对称加密算法
非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密算法也叫公钥加密算法,是可逆的(即可解密)。它需要两个密钥,一个称为公开密钥 (public key),即 公钥,另一个称为 私有密钥 (private key),即 私钥。它们两个必需配对使用,否则不能打开加密文件。
eg: A 生成一对密钥并将其中的一把作为公钥向其它人公开,得到该公钥的 B 使用该密钥对机密信息进行加密后再发送给 A , A 再使用自己保存的另一把专用密钥 (私钥),对加密后的信息进行解密。
- 如果使用 公钥 对数据进行加密,只有用对应的 私钥 才能进行解密。
- 如果使用 私钥 对数据进行加密,只有用对应的 公钥 才能进行解密。
常用的非对称性算法包括:
1、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。是目前最有影响力的公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准。
2、DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法。
3、ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。主要优势是在某些情况下,它比其他的方法( RSA 算法)使用更小的密钥,提供 相当的或更高等级 的安全级别。但 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。
散列加密算法
散列算法,又称哈希函数,是一种单向加密算法。在一些场景中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出,这个固定长度的输出称为原输入消息的 散列 或 消息摘要 (Message digest)。散列算法不算加密算法,其结果是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。
散列加密算法一般用于产生消息摘要、密钥加密等。常用的散列加密算法包括:
1、MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,是一种 不可逆 的加密算法,相同的明文产生相同的密文。目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。严格来说,MD5 不是一种加密算法 而是 摘要算法。它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。
2、SHA1(Secure Hash Algorithm 1):SHA1 是和 MD5 一样流行的 消息摘要算法,SHA-1摘要比MD5摘要长32 位,所以SHA-1对强行攻击有更大的强度,比MD5更安全,抗穷举(brute-force)性更好。但在相同的硬件上,SHA-1 的运行速度比 MD5 慢。SHA-1是基于MD5,可以被应用在检查 文件完整性 以及 数字签名 等场景。
3、HMAC(Hash-based Message Authentication Code):利用 哈希算法 (MD5、SHA1 等),以一个 密钥 和 一个消息 为输入,生成一个 消息摘要 作为输出,也就是说HMAC是需要一个密钥的。HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是无法计算出正确的散列值的,这样就可以防止数据被篡改。
对比各种加密算法
对称加密算法比较
名称 | 密钥长度 | 运算速度 | 安全性 | 资源消耗 |
---|---|---|---|---|
DES | 56位 | 较快 | 低 | 中 |
3DES | 112位或168位 | 慢 | 中 | 高 |
AES | 128、192、256位 | 快 | 高 | 低 |
非对称加密算法比较
名称 | 成熟度 | 安全性(取决于密钥长度) | 运算速度 | 资源消耗 |
---|---|---|---|---|
RSA | 高 | 高 | 慢 | 高 |
DSA | 高 | 高 | 慢 | 只能用于数字签名 |
ECC | 低 | 高 | 快 | 低(计算量小,存储空间占用小,带宽要求低) |
散列算法比较
名称 | 安全性 | 速度 |
---|---|---|
MD5 | 中 | 快 |
SHA-1 | 高 | 慢 |
对称与非对称加密算法比较
名称 | 密钥管理 | 安全性 | 速度 |
---|---|---|---|
对称算法 | 比较难,不适合互联网,一般用于内部系统 | 中 | 快好几个数量级(软件加解密速度至少快100倍,每秒可以加解密数M比特数据),适合大数据量的加解密处理 |
非对称算法 | 密钥容易管理 | 高 | 慢,适合小数据量加解密或数据签名 |
加密算法选择
从性能和安全性综合考虑:对称加密选择 AES(128位),非对称加密选择 ECC(160位)或 RSA(1024),消息摘要选择 MD5,数字签名选择 DSA。