常用的加解密算法的优缺点、应用场景总结
一、加解密的基础知识
1、对称密钥加密
对称密钥加密(一个密钥),也叫做共享密钥加密或机密密钥加密,使用发件人和收件人共同拥有的单个密钥。这种密钥既用于加密,也用于解密,叫做机密密钥。对称密钥加密是加密大量数据的一种行之有效的方法。
对称密钥加密有许多种算法如DES,RC4,IDEA等,但所有这些算法都有一个共同的目的:以可还原的方式将明文(未加密的数据)转换为暗文。暗文使用加密密钥编码,对于没有解密密钥的任何人来说它都是没有意义的。由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥。
衡量对称算法优劣的主要尺度是其密钥的长度。密钥越长,在找到解密数据所需的正确密钥之前必须测试的密钥数量就越多。需要测试的密钥越多,破解这种算法就越困难。
2、公钥加密
公钥加密使用两个密钥:一个公钥和一个私钥,这两个密钥在数学上是相关的。为了与对称密钥加密相对照,公钥加密有时也叫做不对称密钥加密。在公钥加密中,公钥可在通信双方之间公开传递,或在公用储备库中发布,但相关的私钥是保密的。只有使用私钥才能解密用公钥加密的数据。使用私钥加密的数据只能用公钥解密。下图中,发件人拥有收件人的公钥,并用它加密了一封邮件,但只有收件人掌握解密该邮件的有关私钥。
公钥、私钥两个有什么联系呢?
简单的说就是,通过公钥加密的数据,只能通过私钥解开。通过私钥加密的数据,只能通过公钥解开。
公钥算法的主要局限在于,这种加密形式的速度相对较低。实际上,通常仅在关键时刻才使用公钥算法,如在实体之间交换对称密钥时,或者在签署一封邮件的散列时(散列是通过应用一种单向数学函数获得的一个定长结果,对于数据而言,叫做散列算法)。将公钥加密与其它加密形式(如对称密钥加密)结合使用,可以优化性能,如数字签名和密钥交换。
3、单向散列算法
散列,也称为散列值或消息摘要 ,是一种与基于密钥(对称密钥或公钥)的加密不同的数据转换类型。散列就是通过把一个叫做散列算法的单向数学函数应用于数据,将任意长度的一块数据转换为一个定长的、不可逆转的数字,其长度通常在128~256位之间。所产生的散列值的长度应足够长,因此使找到两块具有相同散列值的数据的机会很少。如发件人生成邮件的散列值并加密它,然后将它与邮件本身一起发送。而收件人同时解密邮件和散列值,并由接收到的邮件产生另外一个散列值,然后将两个散列值进行比较。如果两者相同,邮件极有可能在传输期间没有发生任何改变。
数字签名:结合使用公钥与散列算法
数字签名是邮件、文件或其它数字编码信息的发件人将他们的身份与信息绑定在一起(即为信息提供签名)的方法。对信息进行数字签名的过程,需要将信息与由发件人掌握的秘密信息一起转换(使用私钥)为叫做签名的标记。数字签名用于公钥环境(任何人都可以拥有)中,它通过验证发件人确实是他或她所声明的那个人,并确认收到的邮件与发送的邮件完全相同。
散列算法处理数据的速度比公钥算法快得多。散列数据还缩短了要签名的数据的长度,因而加快了签名过程。
密钥交换:结合使用对称密钥与公钥
对称密钥算法非常适合于快速并安全地加密数据。但其缺点是,发件人和收件人必须在交换数据之前先交换机密密钥。结合使用加密数据的对称密
二、常用的几种加密方式
1、MD5 加密(散列算法)
(1)、概念
MD5是一种基于哈希函数的单向加密算法,只能加密、无法解密,它是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了"字节串"而不是"字符串"这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。MD5将任意长度的"字节串"变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。MD5是不可逆的只有加密没有解密。
2)、单纯的 MD5加密是不安全的,可通过撞库的方式来暴力破解出来的,因此可以通过多种方式来进行加强
a.加盐
最好配合 MD5加盐的方式来对密文进行再次处理,即往明文中插入或拼接一个随机的字符串,然后再进行加密。
盐值加如的代码例子如下
password = [passwordstringByAppendingString:salt];
b.乱序
先对明文进行md5加密,然后对密文进行乱序
3)、加密强度
a、未加盐:2颗星
b、加盐:4颗星
2、时间戳/动态密码 的加密
(1)、实现目标
用户的密码是一定的,但是每次发送给网络的密码都不同.相同的密码相同的加密算法,每次获得的值不同.客户端和服务器端的时间是相同的.
(2)、原理
客户端和服务器端依时间为基准采用相同的加密算法
(3)、实现细节
客户端和服务器端要求时间一致,时间精度越高,越安全
假如约定网络请求延时3秒
客户端: a. 对请求参数one进行一次AES对称加密(或者其他的对称加密),后形成密文two。
b.对当前时间进行一次md5加密后形成three时间密文
c.将密文two与密文three进行拼接(或其他算法),再进行一次AES对称加密(或者其他对称加密)形成four密文。
d.将密文four发送给服务器。
服务端: a.对收到的密文four进行一次AES对称解密得到two+three的密文结合体。
b.以收到的时间为基准与前3秒时间遍历成md5密文,并与结合体进行对比,假如匹配上了,就将two密文解密出来。
c.对two密文进行最后的AES对称加密然后就得出正确的请求参数
( 4)、加密强度:5颗星
3、Base64加密(base64 是一种编码方式,只能算是浅加密,是对称加密)
(1)、概念
Base64编码的思想是:采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组,以3个字节为一组,按顺序排列24位数据,再把这24位数据分成4组,即每组6位;再在每组的的最高位前补两个0凑足一个字节,这样就把一个3字节为一组的数据重新编码成了4个字节;当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节,这时在最后一组填充1到2个0字节,并在最后编码完成后在结尾添加1到2个=号。
(2)、特点:
- 数据加密之后,数据量会变大,变大1/3左右。
-可进行反向解密。
-编码后有个非常显著的特点,末尾有个=号。
(3)、加密强度:3颗星
3、使用DES加密(对称加密)
数据加密标准算法(Data Encryption Standard),和BASE64最明显的区别就是有一个公有密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串。使用DES加密、解密的核心是确保工作密钥的安全性。
4、AES加密(对称加密)
(1)、概念
高级加密标准Advanced Encryption Standard简称:AES,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。它是一种对称加密算法,这个标准也替代原先的DES标准,已经被多方分析且广为全世界所使用。AES设计有三个密钥长度:128、192、256位,相对而言,AES的128密钥比DES的56密钥强1021倍。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。
(2)、特点
AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活,在软件及硬件上都能快速地加解密且只需要很少的存储资源等优点。
(3)、加密强度:4颗星
5、RSA加密(非对称加密)
(1)、概念
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。RSA的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位,这就使加密的计算量很大。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA算法是非对称加密算法的典型代表,既能加密、又能解密。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。用户通过https协议访问服务器时,就是使用非对称加密算法进行数据的加密、解密操作的。
服务器发送数据给客户端时使用私钥(private key)进行加密,并且使用加密之后的数据和私钥生成数字签名(digital
signature)并发送给客户端。客户端接收到服务器发送的数据会使用公钥(public key)对数据来进行解密,并且根据加密数据和公钥验证数字签名的有效性,防止加密数据在传输过程中被第三方进行了修改。
客户端发送数据给服务器时使用公钥进行加密,服务器接收到加密数据之后使用私钥进行解密。
(2)、特点
- 密钥管理的方便,计算量很大速度相对比较慢。
- 安全性很高,能够抵抗到目前为止已知的绝大多数密码攻击。
(3)、加密强度:4.5颗星
5、多种加密方式配合加密
利用多种加密方式,按照约定的相同算法进行配合加密解密,可以将安全程度大大提升,但永远没有绝对安全的加密方式。
三、各个加密方法优缺点、应用场景 总结
免费的iOS SDK和ipa加固和苹果审核被拒群:289533769,群里有免费的iOS SDK和工程的混淆加固工具,每天都分享苹果最新提审过包策略,欢迎大家进来一起交流一起进步一起过包!