1. Base64编码
Base64
是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64
就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64
编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence
系统Hibernate
中,就采用了Base64
来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP
表单和HTTP GET URL
中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64
编码具有不可读性,需要解码后才能阅读。
其实Base64
作为一种编码方式:
- 定义:8Bits字节编码方式之一
- 应用:传输8Bit字节代码
- 特性:
Base64
编码具有不可读性
2. 散列算法(签名算法/摘要)
散列算法,又称哈希函数,是一种单向加密算法。在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名。
散列算法(签名算法)有:MD5
、SHA1
、HMAC
等,这是一种数据完整性的加密,这种单向加密一般我们称为摘要,而不是纯意义上的加密。防止数据在传输过程中被篡改,因为摘要不可逆的,比较常见的场景,某会员系统里,会员密码信息都是通过摘要入库的,验证密码是否一致,也是通过对比摘要,这保护了用户密码的安全性。
MD5
MD5
:MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
MD5
主要特征:
- 不可逆:
MD5
是不可逆转和破解的。 - 压缩性:任意长度的数据,算出的
MD5
值长度都是固定的。 - 容易计算:从原数据计算出
MD5
值很容易。 - 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的
MD5
值都有很大区别。 - 强抗碰撞:已知原数据和其
MD5
值,想找到一个具有相同MD5
值的数据(即伪造数据)是非常困难的。
MD5
用途:主要用于验证,防止信息被修。具体用途如:文件校验、数字签名、鉴权协议。
SHA1
SHA1
:是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且模仿了该算法。SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的Hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。而SHA-1
基于MD5
,MD5又基于MD4。
HMAC
HMAC
:是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。也就是说HMAC是需要一个密钥的。所以,HMAC_SHA1也是需要一个密钥的,而SHA1不需要。
3. 对称加密
对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。
提起对称加密算法不得不说的就是非对称加密算法,下面我们就说一下他们之间的区别:
- 对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。常见的对称加密有
DES
、AES
等。 - 非对称加密用的是公私钥,公钥和私钥一一对应,其特点是安全性要比对称加密高,但由于算法强度比对称加密复杂,加解密的速度比对称加解密的速度要慢。常见的非对称加密有
RSA
、ESA
、ECC
等。
对称加密算法:
-
DES(Data Encryption Standard)
:数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解) -
3DES
:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)。 -
AES(Advanced Encryption Standard)
:高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。 -
Blowfish
:blowfish加密算法是一种对称的分组加密算法,每次加密一个64位分组,使用32位~448位的可变长度密钥,应用于内部加密。加密过程分为两个阶段:密钥预处理和信息加密。
名称 | 密钥长度 | 运算速度 | 安全性 | 资源消耗 |
---|---|---|---|---|
DES | 56位 | 较快 | 低 | 中 |
3DES | 112位或168位 | 慢 | 中 | 高 |
AES | 128、192、256位 | 快 | 高 | 低 |
加密模式
-
ECB
:电子密码本,就是每个块都是独立加密的。 -
CBC
:密码块链,使用一个密钥和一个初始化向量(IV)对数据执行加密转换。
只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。
4. 非对称加密
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
在非对称加密中使用的主要算法有:DSA
、RSA
、ESA
、ECC
(椭圆曲线加密算法)、Elgamal
、Rabin
、D-H
、背包算法
等。不同算法的实现机制不同,可参考对应算法的详细资料。
非对称性算法:
-
RSA
:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。RSA在国外早已进入实用阶段,已研制出多种高速的RSA的专用芯片。 -
DSA
(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法。 -
ECC
(Elliptic Curves Cryptography):椭圆曲线密码编码学。ECC和RSA相比,具有多方面的绝对优势,主要有:抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
名称 | 成熟度 | 安全性(取决于密钥长度) | 运算速度 | 资源消耗 |
---|---|---|---|---|
RSA | 高 | 高 | 慢 | 高 |
DSA | 高 | 高 | 慢 | 只能用于数字签名 |
ECC | 低 | 高 | 快 | 低(计算量小,存储空间占用小,带宽要求低) |
非对称加密工作原理:
- 乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。 - 乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
- 在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。
非对称加密一般有两种用途:
- 进行数据认证(鉴权)服务校验,即对发送数据方是否是我们所期望的那个做验证。私钥加签,公钥验签。
- 对数据进行加密,公钥加密,私钥解密。由于非对称加密算法的低效,所以各密码机构主张对称加 密算法和非对称加密算法结合,用对称加密算法加密内容,用非对称加密算法加密对称算法的密钥。在算法设计上,非对称加密算法对待加密数据长度要求极为苛刻。比如,RSA算法要求待加密数据长度不得超过53个字节。所以,非对称加密主要用于交换对称加密的秘密密钥,而非数据内容上的加密。
非对称加密与对称加密相比优缺点:
- 优点:其安全性更好,对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
- 缺点:非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
名称 | 密钥管理 | 安全性 | 速度 |
---|---|---|---|
对称算法 | 比较难,不适合互联网,一般用于内部系统 | 中 | 快好几个数量级(软件加解密速度至少快100倍,每秒可以加解密数M比特数据),适合大数据量的加解密处理 |
非对称算法 | 密钥容易管理 | 高 | 慢,适合小数据量加解密或数据签名 |
项目应用总结:
- 加密算法是可逆的,用来对敏感数据进行保护。散列算法(签名算法、哈希算法)是不可逆的,主要用于身份验证。
- 对称加密算法使用同一个密匙加密和解密,速度快,适合给大量数据加密。对称加密客户端和服务端使用同一个密匙,存在被抓包破解的风险。
- 非对称加密算法使用公钥加密,私钥解密,私钥签名,公钥验签。安全性比对称加密高,但速度较慢。非对称加密使用两个密匙,服务端和客户端密匙不一样,私钥放在服务端,黑客一般是拿不到的,安全性高。
- Base64不是安全领域下的加解密算法,只是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,特别适合在http,mime协议下的网络快速传输数据。UTF-8和GBK中文的Base64编码结果是不同的。采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到,但这种方式很初级,很简单。Base64可以对图片文件进行编码传输。
- https协议广泛用于万维网上安全敏感的通讯,例如交易支付方面。它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
- 大量数据加密建议采用对称加密算法,提高加解密速度;小量的机密数据,可以采用非对称加密算法。在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
- MD5标准密钥长度128位(128位是指二进制位。二进制太长,所以一般都改写成16进制,每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。16位加密就是从32位MD5散列中把中间16位提取出来);sha1标准密钥长度160位(比MD5摘要长32位),Base64转换后的字符串理论上将要比原来的长1/3。