各加密算法总结

一、单向散列算法

也称为Hash(哈希)算法。是一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(该过程不可逆)。Hash函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。常见的散列算法有MD5SHAHMACRIPE-MDHAVALN-HashTiger等。

1. MD5算法

MD5消息摘要算法(Message Digest Algorithm 5)。
MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。

MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不能一样的)。
MD5算法还具有以下性质:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5虽然说是不可逆的 但是由于有网站http://www.cmd5.com的存在,专门用来查询MD5码 所以有的简单的MD5码是可以在这里搜到源码的。
为了让MD5码更加安全 涌现了很多其他方法 如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。

2. SHA算法

安全散列算法(Secure Hash Algorithm)简称SHA。有SHA-1SHA-256SHA-384SHA-512几种,分别产生160位、256位、384位和512位的散列值。

2.1 SHA-1算法

是一种主流的散列加密算法,设计时基于和MD4相同的原理,并模仿了该算法。消息分组和填充方式与MD5相同。也用到了一些常量做初始化数据。
总结,随着密码分析技术的发展,现有的散列算法都是不安全的。如SHA-160MD5RIPEMDHAVALTiger在某些条件下能构造出碰撞。建议选择SHA-256/384/512,或者Whirlpool。如果在解密时碰到Hash算法,一般只需根据每种Hash算法的特征搞清楚具体哪一种Hash算法以及是否为某种算法的变形,继而通过该Hash的源代码即可破解。

名称安全性运算速度
SHA-1慢(消息验证)
MD5快(消息验证)

3.HMAC

HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

二、对称加密算法

加密密钥和解密密钥是完全相同的。其安全性依赖于:
1.加密算法足够强。
2.密钥的秘密性。

常见的对称分组加密算法有DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、IDEA(International Data Encryption Algorithm)、BlowFishTwofish等。

这里写图片描述

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解密得到原数据,这样便实现了安全性较高的数据传输。

2. 3DES算法

三重DES(TDEA,Triple Data Encryption Algorithm)算法,这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2,三个步骤:1. 用密钥K1进行DEA加密。 2. 用K2对步骤1的结果进行DES解密。 3. 用步骤2的结果使用密钥K1进行DES加密。这种方法的缺点,是要花费原来三倍时间,从另一方面来看,三重DES的112位密钥长度是很“强壮”的加密方式了。

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-128AES-192AES-256

4. RC4流密码

现今最为流行的流密码,应用于SSL(Secure Sockes Layer)、WEPRC4生成一种称为密钥流的伪随机流,它同明文通过异或操作相混合以达到加密的目的。解密时,同密文进行异或操作。其密钥流的生成有两部分组成:KSA(the Key-Scheduling Algorithm)和PRGA(the Pseudo-Random Generation Algorithm)。由于RC4算法加密采用XOR,所以一旦密钥序列出现重复,密文就有可能被破解。推荐使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。

5. TEA算法

TEA(Tiny Encryption Algorithm)算法。分组长度为64位,密钥长度为128位。采用Feistel网络。其作者推荐使用32次循环加密,即64轮。TEA算法简单易懂,容易实现。但存在很大的缺陷,如相关密钥攻击。由此提出一些改进算法,如XTEA

6. IDEA算法

IDEA(International Data Encryption Algorithm)国际数据加密算法。分组密码IDEA明文和密文的分组长度为64位,密钥长度为128位。该算法的特点是使用了3种不同的代数群上的操作。IDEA共使用52个16位的子密钥,由输入的128位密钥生成。加密过程由8个相同的加密步骤(加密轮函数)和一个输出变换组成。而解密过程与加密过程相同。解密与加密唯一不同的地方就是使用不同的子密钥。首先,解密所用的52个子密钥是加密的子密钥的相应于不同操作运算的逆元,其次,解密时子密钥必须以相反的顺序使用。

7. BlowFish算法

BlowFish算法是一个64位分组及可变密钥长度的分组密码算法,该算法是非专利的。BlowFish算法基于Feistel网络(替换/置换网络的典型代表),加密函数迭代执行16轮。分组长度为64位(bit),密钥长度可以从32位到448位。算法由两部分组成:密钥扩展部分和数据加密部分。密钥扩展部分将最长为448位的密钥转化为共4168字节长度的子密钥数组。其中,数据加密由一个16轮的Feistel网络完成。每一轮由一个密钥相关置换和一个密钥与数据相关的替换组成。

对称加密对比

名称密钥长度运算速度安全性资源消耗
DES56位较快
3DES112位或168位
AES128、192、256位

三、非对称加密算法

又称为公开密钥加密算法(Asymmetric Key Cryptography),需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

这里写图片描述

1. RSA算法

RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman), 是第一个既能用于数据加密也能用于数字签名的算法,易于理解和操作,应用广泛。RSA的安全性依赖于大整数因子分解。目前来看,攻击RSA算法最有效的方法便是分解模n。一般认为RSA需要1024位或更长的魔术才有安全保障。

2. DSA数字签名算法

DSA(Digital Signature Algorithm), 是在借鉴了ElGamal及Schnorr签名算法的基础上,公布的数字签名标准(Digital Signature Standard),该标准采用的算法。其安全性同样基于有限域的离散对数问题。目前DSA的应用越来越广泛。

3. ECC椭圆曲线密码编码学

相比RSA等公钥算法,使用较短的密钥长度而能得到相同程度的安全性。预测未来ECC(Elliptic Curve Cryptography)将会取代RSA成为主流的密钥算法。

4. ElGamal公钥算法

其完全依赖于在有限域上计算离散对数的困难性。ElGamal的一个不足之处是密文的长度是明文的两倍。而另一种签名算法,Schnorr签名系统的密文比较短,这是由其系统内的单向散列函数决定的。

私钥加密、公钥解密——签名

非对称算法的私钥加密、公钥解密会被用于数字签名,一般用于防篡改和伪装。发送方拥有私钥,接收方拥有公钥。一般流程如下:
1.发送方选择一种算法(最常用的算法是MD5),对原始数据进行计算生成摘要
2.发送方算出摘要后,用私钥对其进行加密,得到的结果称为原始数据的签名。然后把原始数据和签名一起发送给接收方。
3.接收方收到发来的数据后,通过公钥对收到的签名进行解密,最后获得发送方的摘要
4.接收方用与发送方计算摘要一致的算法对收到的原始数据进行计算,得到由原始数据计算得到的本地摘要
5.接收方将本地计算的摘要和发送方的摘要进行对比。若结果一致,则证明没有被篡改过。

在这个过程中,就是一个私钥加密,公钥解密的过程,用于验证数据完整性和发送方身份的。而公钥加密,私钥解密,是用于防止数据被第三方得到。当然,签名的效率要比非对称加密的效率要高的多。

非对称加密对比

名称成熟度运算速度安全性(取决于密钥长度)资源消耗
RSA
DSA只能用于数字签名
ECC低(计算量小,存储空间小,带宽要求低)

四、对称与非对称算法比较

名称运算速度密钥管理安全性
对称算法比较难,不适合互联网,一版用于内部系统快好几个数量级,适合大数据量的加解密
非对称算法容易管理慢,适合小数据量加解密或数据签名

对称密码体制的特点

优点:算法公开、计算量小、加密速度快、加密效率高、可逆
缺点:双方使用相同钥匙,安全性得不到保证
现状:对称加密的速度比公钥加密快很多,在很多场合都需要对称加密,
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准

非对称密码体制的特点

优点: 非对称加密使用了一对密钥,公钥与私钥,所以安全性高。
缺点:加解密速度慢的特点,密钥尺寸大。

总结

由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。

对称加密算法不能实现签名,因此签名只能非对称算法。

由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。

在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。

五、混合加密

通信双方的通信过程分为两个部分,双方先利用非对称加密技术传送本次通信所用的对称密钥,然后再用对称加密技术加密传送文件。

这里写图片描述

六、其他算法

1. Base64编码

Base64编码是将二进制数据编码为可现实的字母和数字,用于传送图形、声音和传真等非文本数据。常用于MIME电子邮件格式中。其使用含有65个字符的ASCII字符集(第65个字符为“=”,用于对字符串的特殊处理过程),并用6个进制位表示一个可显示字符。

把数据编码为Base64,将第一个字节放置于24位缓冲区的高8位,第二个字节放置于中间的8位,第三个字节放置于低8位。如果是少于3个字节的数据,相应的缓冲区置0。然后对24位缓冲区以6位为一组作为索引,高位优先,从字符串“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789+/”中取出相应的元素作为输出。如果仅有一个或两个字节输入,那么只使用输出的两个或三个字符,其余的用“=”填充。

解码过程是编码的逆过程。首先得到Base64字符串的每个字符在Base64码表中的索引,然后将这些索引的二进制连接起来,重新以8位为一组进行分组,即可得到源码。

  1. Base24码表
    BCDFGHJKMPQRTVWXY2346789
  2. Base32码表:
    ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
  3. Base60码表:
    0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwx
    Windows产品序列号就是使用Base24编码。实际使用时,码表会和标准码表不一样,但原理相同。

2. CRC32算法

CRC(Cyclic Redundancy Checksum 或者 Cyclic Redundancy Check), 是对数据的校验值,中文为“循环冗余校验码”,常用语校验数据完整性。最常见的CRCCRC32,即数据校验值为32位。CRC32代码量小,容易理解,所以目前应用十分广泛。但同时CRC32并不是一个安全的加密算法。如果需要更安全的完整性校验算法,建议使用数字签名技术。

七、常见的加密库

1. Miracl大数运算库

Miracl(Multiprecision Integer and Rational Arithmetic C/C++ Library),多精度整数和有理数算术运算C/C++库。它是一个大数库,实现了设计使用大数的加密技术的最基本的函数。支持RSA公钥系统、Diffie-Hellman密钥交换、DSA数字签名系统及基于GF(p)和GF(2m)的椭圆曲线加密系统。其提供了C和C++两种接口,使用方便,速度快,开源。

2. FGInt

FGInt(Fast Gigantic Integers),是用于Delphi的一种可以实现常见的公钥加密系统的库。

3. freeLIP

最初设计用于进行RSA-129挑战大数计算的大数库,采用2的30次方进制来表示大数,速度不及miracl

4. Crypto++

一个实现了相当数量的加密算法的加密库。使用了C++的高级语法,文档较少,不易上手。

5. LibTomCrypt

一款相当不错的加密算法库。包括了常见的散列算法、对称算法及公钥加密系统。接口友好,非常适合C程序员使用。

6. GMP

全称GNU Multiple Precision Arithmetic Library。其核心采用汇编实现,速度非常快,超过miracl,常用来实现大整数因子的分解。

7. OpenSSL

主要用于网络安全,也包含了一些加密算法的实现。如对称算法中的BlowFishIDEADESCAST,公钥中的RSADSA,散列中的MD5RIPEMDSHA等。

8. DCP和DEC

DCP全称Delphi Cryptography Package,DEC全称Delphi Encryption Compendium,都是用于Delphi的一种加密算法库。这两个算法库实现了大部分常见的散列算法及对称算法,使用方便。

9. Microsoft Crypto API

是微软为了方便程序员在软件中进行数字签名、数据加密的开发而提供的一套加密系统。接口友好方便。

10. NTL

是一个可以用于数论相关计算的库。提供了非常友好的C++接口,用于实现有符号的、算术整数的运算,以及向量、矩阵、基于有限域和整数的多项式运算。在密码学中,有限域的应用相当广泛,如AEStwofishECC等都涉及有限域。

加密应用

  1. 通过简单的URLENCODEBase64编码防止数据明文传输。
  2. 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验。
  3. 对于重要数据,使用RSA进行数字签名,起到防篡改作用。
  4. 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密。原因是, 客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES

用户登录注册加密机制

1.客户端注册过程

客户端注册账号时,需要先将账号发送给服务器,向服务器申请一个只属于当前用户的密钥。客户端需要把该密钥保存到本地,直接作为后面HMAC的密钥。

然后,客户端将用户的密码进行MD5加密,再使用刚刚保存的密钥进行HMAC加密。最后将账号和密码发送给服务器,服务器端就注册成功了。服务器端会保留用户的账号密码的MD5账号密钥的数据。而且在不修改密码和更换客户端的情况下,账号密钥密码的MD5只会传输一次,所以这也降低了许多风险。

2.客户端登录过程

客户端登录时,需要再次对密码进行MD5加密,并使用保存的密钥进行HMAC加密。然后发送给服务器,服务器会拿出当前用户注册时留下的密码的MD5通过密钥进行HMAC加密,作对比。如果比对结果一致,就成功登录了。

3.更换客户端登录

如果用户在另一台客户端进行登录,就需要重新申请一次密钥。因为本地的密钥要么为空,要么与当前用户的账号不对应。服务器返回密钥后,并保存到本地,然后重新开始登录流程。

4.数据传输安全

当然,这只是原理性的讨论,在实际中要复杂许多。虽然服务器不会明文保存密码,但并不能说明这些密码的MD5是安全的。市面上有许多MD5的对比库,一旦泄露也很危险。所以,我们还需要在MD5前对密码进行加盐处理。

另外,还要对请求增加时间戳校验,不给居心不良的人留下足够时间。还要增加完整性校验,防止请求被篡改。这些都是数据传输安全处理的事务了,因为你的登录注册也是基于你的网络请求的,需要由数据传输安全来保障你的网络层业务。

参考资料:
单向加密算法MD5和SHA
对称加密算法DES、3DES和AES
算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值