1 简介
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
通过修改文件的md5值,可以绕过某些网盘的"违规文件扫描机制",这是因为网盘服务器内存储着已知违规文件的md5值,当上传文件时会自动与服务器md5数据库匹配以判断是否违规。
加密算法通常分为两大类:“对称式”和“非对称式”。
2 加密算法分类
2.1 对称式加密技术
介绍
对称式加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits。
其安全性依赖于:
- 加密算法足够强
- 密钥的秘密性
优点
算法公开、计算量小、加密速度快、加密效率高、可逆
对公钥加密快很多,在很多场合适用
比非对称算法快好几个数量级,适合大数据量的加解密
缺点
双方使用相同钥匙,安全性得不到保证,不合适互联网使用
注
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准
2.2 非对称式加密技术
介绍
非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难不把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。
优点
非对称加密使用了一对密钥,公钥与私钥,所以安全性高。
缺点
加解密速度慢的特点,密钥尺寸大。
比对称加密算法慢,适合小数据量加解密或数据签名
注
2.3 哈希加密技术(单向散列算法)
也称为Hash(哈希)算法。是一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(该过程不可逆)。Hash函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。
3 加密算法汇总
3.1 对称式加密技术
3.1.1 DES算法
DES(Data Encryption Standard)是一种单一密钥对称加解密算法。通信主体之间只有一个密钥,该密钥不对第三方公开。但由于密钥长度较短,导致安全性不高。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密,如果Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式作为DES的输出结果。在使用DES 时,双方预先约定使用的”密码”即Key,然后用Key去加密数据;接收方得到密文后使用同样的Key解密得到原数据,这样便实现了安全性较高的数据传输。
3.1.2 3DES算法
三重DES(TDEA,Triple Data Encryption Algorithm)算法,这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2,三个步骤:1. 用密钥K1进行DEA加密。 2. 用K2对步骤1的结果进行DES解密。 3. 用步骤2的结果使用密钥K1进行DES加密。这种方法的缺点,是要花费原来三倍时间,从另一方面来看,三重DES的112位密钥长度是很“强壮”的加密方式了。
3.1.3 AES算法
AES(Advanced Encryption Standard,高级加密标准),用于替代DES成为新一代的加密标准。具有128比特的分组长度,并支持128、192和256比特的密钥长度,可在全世界范围内免费得到。其前身为Rijndael(读作:Rain Doll)。Rijndael算法与AES的唯一区别在于各自所支持的分组长度和密码密钥长度的反胃不同。Rijndael是具有可变分组长度和可变密钥长度的分组密码,其分组长度和密钥长度均可独立地设定为32比特的任意倍数,最小值128bit,最大256bit。而AES将分组长度固定为128位,而且仅支持128、192和256位的密钥长度,分别称为AES-128,AES-192,AES-256。
3.1.4 RC4流密码
现今最为流行的流密码,应用于SSL(Secure Sockes Layer)、WEP。RC4生成一种称为密钥流的伪随机流,它同明文通过异或操作相混合以达到加密的目的。解密时,同密文进行异或操作。其密钥流的生成有两部分组成:KSA(the Key-Scheduling Algorithm)和PRGA(the Pseudo-Random Generation Algorithm)。由于RC4算法加密采用XOR,所以一旦密钥序列出现重复,密文就有可能被破解。推荐使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。
3.1.5 TEA算法
TEA(Tiny Encryption Algorithm)算法。分组长度为64位,密钥长度为128位。采用Feistel网络。其作者推荐使用32次循环加密,即64轮。TEA算法简单易懂,容易实现。但存在很大的缺陷,如相关密钥攻击。由此提出一些改进算法,如XTEA。
3.1.6 IDEA算法
IDEA(International Data Encryption Algorithm)国际数据加密算法。分组密码IDEA明文和密文的分组长度为64位,密钥长度为128位。该算法的特点是使用了3种不同的代数群上的操作。IDEA共使用52个16位的子密钥,由输入的128位密钥生成。加密过程由8个相同的加密步骤(加密轮函数)和一个输出变换组成。而解密过程与加密过程相同。解密与加密唯一不同的地方就是使用不同的子密钥。首先,解密所用的52个子密钥是加密的子密钥的相应于不同操作运算的逆元,其次,解密时子密钥必须以相反的顺序使用。
3.1.7 BlowFish算法
BlowFish算法是一个64位分组及可变密钥长度的分组密码算法,该算法是非专利的。BlowFish算法基于Feistel网络(替换/置换网络的典型代表),加密函数迭代执行16轮。分组长度为64位(bit),密钥长度可以从32位到448位。算法由两部分组成:密钥扩展部分和数据加密部分。密钥扩展部分将最长为448位的密钥转化为共4168字节长度的子密钥数组。其中,数据加密由一个16轮的Feistel网络完成。每一轮由一个密钥相关置换和一个密钥与数据相关的替换组成。
名称 | 密钥长度 | 运算速度 | 安全性 | 资源消耗 |
---|---|---|---|---|
DES | 56位 | 较快 | 低 | 中 |
3DES | 112位或168位 | 慢 | 中 | 高 |
AES | 128、192、256位 | 快 | 高 | 低 |
3.2 非对称式加密技术
3.2.1 RSA算法
RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman), 是第一个既能用于数据加密也能用于数字签名的算法,易于理解和操作,应用广泛。RSA的安全性依赖于大整数因子分解。目前来看,攻击RSA算法最有效的方法便是分解模n。一般认为RSA需要1024位或更长的魔术才有安全保障。
3.2.2 DSA数字签名算法
DSA(Digital Signature Algorithm), 是在借鉴了ElGamal及Schnorr签名算法的基础上,公布的数字签名标准(Digital Signature Standard),该标准采用的算法。其安全性同样基于有限域的离散对数问题。目前DSA的应用越来越广泛。
3.2.3 ECC椭圆曲线密码编码学
相比RSA等公钥算法,使用较短的密钥长度而能得到相同程度的安全性。预测未来ECC(Elliptic Curve Cryptography)将会取代RSA成为主流的密钥算法。
3.2.4 ElGamal公钥算法
其完全依赖于在有限域上计算离散对数的困难性。ElGamal的一个不足之处是密文的长度是明文的两倍。而另一种签名算法,Schnorr签名系统的密文比较短,这是由其系统内的单向散列函数决定的。
名称 | 成熟度 | 运算速度 | 安全性(取决于密钥长度) | 资源消耗 |
---|---|---|---|---|
RSA | 高 | 慢 | 高 | 高 |
DSA | 高 | 慢 | 高 | 只能用于数字签名 |
ECC | 低 | 快 | 高 | 低 |
3.3 哈希加密技术(单向散列算法)
3.3.1 MD5算法
MD5消息摘要算法(Message Digest Algorithm 5)。
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。
MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不能一样的)。
MD5算法还具有以下性质:
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
- 容易计算:从原数据计算出MD5值很容易。
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
- 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
- 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5虽然说是不可逆的 但是由于有网站http://www.cmd5.com的存在,专门用来查询MD5码 所以有的简单的MD5码是可以在这里搜到源码的。
为了让MD5码更加安全 涌现了很多其他方法 如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。
3.3.2 SHA算法
安全散列算法(Secure Hash Algorithm)简称SHA。有SHA-1、SHA-256、SHA-384、SHA-512几种,分别产生160位、256位、384位和512位的散列值。
SHA-1算法
是一种主流的散列加密算法,设计时基于和MD4相同的原理,并模仿了该算法。消息分组和填充方式与MD5相同。也用到了一些常量做初始化数据。
总结,随着密码分析技术的发展,现有的散列算法都是不安全的。如SHA-160、MD5、RIPEMD、HAVAL、Tiger在某些条件下能构造出碰撞。建议选择SHA-256/384/512,或者Whirlpool。如果在解密时碰到Hash算法,一般只需根据每种Hash算法的特征搞清楚具体哪一种Hash算法以及是否为某种算法的变形,继而通过该Hash的源代码即可破解。
名称 | 安全性 | 运算速度 |
---|---|---|
SHA-1 | 高 | 慢(消息验证) |
MD5 | 中 | 快(消息验证) |
3.3.3 HMAC
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。
3.4 混合加密
通信双方的通信过程分为两个部分,双方先利用非对称加密技术传送本次通信所用的对称密钥,然后再用对称加密技术加密传送文件。
4 示例
参考
1、各加密算法总结
2、加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用
3、国产密码安全算法总结
4、关于国密算法 SM1,SM2,SM3,SM4 的笔记
5、AES加密算法的C++实现
6、C++实践(三):C++实现加密算法AES
7、百科–加密算法