常见的三种加密以及对应的加密算法

        各种加密用了很多,MD5、SHA、AES、RSA...等,但是还是傻傻的分不清这几种加密算法分别属于什么类型的加密,以及加密的逻辑。现在放在一起研究了下,于是整理出这篇文章来。

一、散列/Hash加密

1. 简介

         散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。

2. 分类

2.1 MD5加密

        MD5加密的特点:

  1. 不可逆运算(单向加密)
  2. 对不同的数据加密的结果是定长的32位字符(不管文件多大都一样)
  3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
  4. 抗修改性 : 信息“指纹”,对原数据进行任何改动,哪怕只修改一个字节,所得到的 MD5 值都有很大区别.
  5. 弱抗碰撞 : 已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的.
  6. 强抗碰撞: 想找到两个不同数据,使他们具有相同的 MD5 值,是非常困难的

        MD5 应用:

        一致性验证:MD5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要,就像每个人都有自己独一无二的指纹,MD5对任何文件产生一个独一无二的数字指纹。

        那么问题来了,你觉得这个MD5加密安全吗?其实是不安全的,不信的话可以到这个网站试试:md5破解网站。可以说嗖地一下就破解了你的MD5加密!!!

2.2 加“盐”

        可以加个“盐”试试,“盐”就是一串比较复杂的字符串。加盐的目的是加强加密的复杂度,这么破解起来就更加麻烦,当然这个“盐”越长越复杂,加密后破解起来就越麻烦,不信加盐后然后MD5加密,再去到md5破解网站破解试试看,他就没辙了!!!

        这下应该安全了吧!答案是否定的。如果这个“盐”泄漏出去了,不还是完犊子吗。同学会问,“盐”怎么能泄漏出去呢?其实是会泄漏出去的。比如苹果端、安卓端、前端、后台等等那些个技术人员不都知道吗。。都有可能泄漏出去。又有同学说那就放在服务器吧,放在服务器更加不安全,直接抓包就抓到了!!!

        加固定的“盐”还是有太多不安全的因素,可以看出没有百分百的安全,只能达到相对安全(破解成本 > 破解利润),所以一些金融的app、网站等加密比较高。

        下面来介绍另外两种加密方案

2.3 SHA加密

        安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。当让除了SHA1还有SHA256以及SHA512等。

        SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。

2.4 HMAC加密

        HMAC:给定一个密钥,对明文加密,做两次“散列”,得到的结果还是32为字符串。在实际开发中,密钥是服务器生成,客户端发送请求会拿到KEY。一个账号对应一个KEY。

        以注册为例:当用户把账号提交给服务器,服务器会验证账号的合法性,如果合法就会生成个KEY给客户端(这个KEY只有在注册的时候会出现一次,一个账号只对应一个KEY);客户端会用拿到的KEY给密码用HMAC方式加密(32位字符串)发给服务器,最终服务器会保存这个HMAC密码。这样就注册成功了!以后再登录就会服务器就会比对这个HMAC密码是否相等决定能否登录成功。

        这样一来好像安全了很多哎!即使黑客拿到了客户KEY,也只能拿到一个用户的信息,也就是说只丢失了一个客户的信息。然而上面的加“盐”方式加密,如果“盐”泄漏了,那丢失的可是所有用户信息啊。安全性有了很大提升有木有!!!

        但是这还是不够安全,还可以更佳安全!

        以登录为例:当用户点击登录时,会生成HMAC密码,然后用HMAC密码拼接上一个时间串(服务器当前时间,201801171755,只到分钟),然后一起MD5加密,最后客户端会把加上时间的HMAC值发给服务器;这时候服务器也会用已经存起来的HMAC密码拼接上一个时间串(服务器当前时间),然后一起MD5加密,最后用这个加密后的HMAC值和客户端发来的进行HMAC值对比,对此一样则登录成功!!!

        疑问1.为什么一定要用服务器的时间呢? 
        答:因为客户端可能会修改自己的手机时间,以服务器为准比较好。 

        疑问2.如果网络有延迟怎么办? 
        答:这里服务器可以对比两次,再往后加一分钟对比一次。试想一下如果网络延迟了两分钟,还没请求到时间,那这个网络也是够了!!! 

        疑问3.为什么不让服务器直接修改KEY呢? 
        答:这样也能保证每次登录的HMAC值不一样?注意:这样做服务器会频繁的更新KEY,加大服务器的压力,一般不会去更新,除非更换密码才会更新。当然服务器可以定期去更新KEY,这样安全等级又会提高,更加安全!!

        这个时候如果黑客拦截到了你加了时间戳的HMAC值,不能在两分钟内破解密码,那么他就永远登不进去了。这个密码的破解难度是很大的,代价也高,这样是不是就很安全了,是的,这样就更加安全!!!

二、对称加密

1. 简介

        对称加密算法又称传统加密算法。 加密和解密使用同一个密钥。

        加密解密过程:明文->密钥加密->密文,密文->密钥解密->明文。

2. 示例

        密钥:X 

        加密算法:每个字符+X 

        明文:Hello 

        密钥为 1时加密结果:Ifmmp

        密钥为 2时加密结果:Jgnnq

3. 优缺点

        算法公开,计算量小,加密速度快,加密效率高 

        双方使用相同的钥匙,安全性得不到保证

4. 注意事项

        密钥的保密工作非常重要 ,密钥要求定期更换

5. 分类

5.1 DES(Data Encryption Standard)

        数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解) 

5.2 3DES(Three Data Encryption Standard)

        原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本) 

5.3 AES(Advanced Encryption Standard)

        高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。

6. 加密模式 

6.1 ECB:电子密码本,就是每个块都是独立加密

常见的三种加密以及对应的加密算法_第1张图片

 

6.2 CBC:密码块链,使用一个密钥和一个初始化向量(IV)对数据执行加密转换 

常见的三种加密以及对应的加密算法_第2张图片

        只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用

三、非对称加密

1. 简介: 

  • 对称加密算法又称现代加密算法。 
  • 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。 
  • 非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey) 
  • 公开密钥和私有密钥是一对

        如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。 

        如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

2. 特点: 

        算法强度复杂,安全性依赖于算法与密钥。 加密解密速度慢。

        与对称加密算法的对比: 

        对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。 

        非对称加密有两种密钥,其中一个是公开的。

3. 分类

3.1 RSA

        由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;

        由于RSA算法的加密解密速度要比对称算法速度慢很多,在实际应用中,通常采取 
数据本身的加密和解密使用对称加密算法(AES)。 用RSA算法加密并传输对称算法所需的密钥。

3.2 DSA(Digital Signature Algorithm)

        数字签名算法,是一种标准的 DSS(数字签名标准);

3.3 ECC(Elliptic Curves Cryptography)

        椭圆曲线密码编码学。

         ECC和RSA对比,优势:

  • 抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
  • 计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。
  • 存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
  • 带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。

你可能感兴趣的:(编程技术及工具)