美文网首页iOS面试相关问题/难点
iOS 数据加密(常用加密算法)

iOS 数据加密(常用加密算法)

作者: Aliv丶Zz | 来源:发表于2020-06-11 12:54 被阅读0次

【资料整理】

iOS 中的网络加密

公司的接口一般会两种协议的,一种HTTP,一种HTTPS的,HTTP 只要请求,服务器就会响应,如果我们不对请求和响应做出加密处理,所有信息都是会被检测劫持到的,是很不安全的,客户端加密可以使用我这套工具类进行处理:文章地址

但是不论在任何时候,都应该将服务置于HTTPS上,因为它可以避免中间人攻击的问题,还自带了基于非对称密钥的加密通道!使用HTTPS后,可以省去各种加解密技术。

介绍下HTTPS交互原理

简答说,HTTPS 就是 HTTP协议加了一层SSL协议的加密处理,SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA(如GlobalSign,wosign),在验证服务器身份后颁发,这是需要花钱滴,签发后的证书作为公钥一般放在服务器的根目录下,便于客户端请求返回给客户端,私钥在服务器的内部中心保存,用于解密公钥。

HTTPS 客户端与服务器交互过程:

1、客户端发送请求,服务器返回公钥给客户端;

2、客户端生成对称加密秘钥,用公钥对其进行加密后,返回给服务器;

3、服务器收到后,利用私钥解开得到对称加密秘钥,保存;

4、之后的交互都使用对称加密后的数据进行交互。

参考资料:https://www.cnblogs.com/fengmin/p/8178217.html(包含AFN对不信任证书的相关处理)

1 前言:

在提交用户的隐私数据,例如:登录密码、银行账号等,不能用明文进行传输,很容易被截获。    

        1. get请求的所有参数都直接暴露在URL中,可直接看到

        2. post请求可以利用软件(如Charles)拦截查看手机的请求数据,使用教程参考Charles抓包

因此:在提交用户的隐私数据时,一定不要明文提交,要先加密处理后再进行提交。

2 常见加密算法

常用加密算法                      名称

编码方式                            Base64  Base58

哈希(散列)函数                 MD5(消息摘要算法)  SHA1  SHA256  SHA512

对称加密算法                    DES   AES

非对称加密算法                RSA(公钥、私钥) ECC

对称加密可分为:

         流加密  对信息流中每一个元素加密,如12345678, 先对1加密,在对2加密

         块加密  先对信息分块。然后对块加密,如12345678,先1234成块,5678成块,然后对块加密。

2.1 Base64/Base58编码

                不是加密算法。只是一种编码方式。通过简单 BASE64编码 防止数据明文传输

                 Base64是有64个字符组成,大写A-Z 、小写a-z,数字0-9,两个字符 + 和 =

                Base58中没有字母o,没有数字0,没有大小写字母I i,也没有字符 +  =.(一般用在比特币里面的一种编码方式)

Base64编码原理和处理过程

Base64编码原理

             1、将所有字符转化为ASCII码

             2、将ASCII码转化为8位二进制

             3、将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位

             4、统一在6位二进制前补两个0凑足8位

             5、将补0后的二进制转为十进制

             6、从Base64编码表获取十进制对应的Base64编码

Base64处理过程

             1、转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。

             2、数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。

             3、不断进行,直到全部输入数据转换完成。

             4、如果最后剩下两个输入数据,在编码结果后加1个“=”;

             5、如果最后剩下一个输入数据,编码结果后加2个“=”;

             6、如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。    

  示例:注意 “   =  ” 比较特殊。因为base64是三个字节为一组,如果位数不够时,会使用“=”进行补齐,对文件进行base64编码后文件数据的变化:编码后的数据约等于编码前数据的4/3,会大1/3左右。

        2.2 哈希(散列)函数    

哈希(散列)函数

特点:

    算法是公开的

    对相同的数据加密,得到的结果是一样的"

    对不同的数据加密,得到的结果是定长的,MD5对不同的数据进行加密,得到的结果都是 32 个字符长度的字符串

    信息摘要,信息"指纹",是用来做数据识别的!

    不能逆推反算(重要)

用途:

    版权 对文件进行散列判断该文件是否是正版或原版的

    文件完整性验证 对整个文件进行散列,比较散列值判断文件是否完整或被篡改

    密码加密,服务器并不需要知道用户真实的密码!

                MD5消息摘要算法

                MD5:全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”(经MD2、MD3和MD4发展而来)

                效果:对输入信息生成唯一的128位散列值(32个字符),即 32个16进制的数字。

            ·特点:

                输入两个不同的明文不会得到相同的输出值

                根据输出值,不能得到原始的明文,即其过程不可逆(只能加密, 不能解密)

            ·应用:

                现在的MD5已不再是绝对安全(如:暴力破解的网站),对此,可以对MD5稍作改进,以增加解密的难度。

                解决:加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5(先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序)

            ·注意点:

                开发中,一定要和后台开发人员约定好,MD5加密的位数是16位还是32位(大多数都是32位的),16位的可以通过32位的转换得到。

                MD5加密区分 大小写,使用时要和后台约定好。

                MD5公认被破解不代表其可逆,而是一段字符串加密后的密文,可以通过强大运算计算出字符串加密后的密文对应的原始字符串,但也不是绝对的被破解。

                PS.暴力破解是指通过将明文和生成的密文进行配对,生成强大的数据库,在数据库中搜索,在这里就可以破解密码。破解网址 http://www.cmd5.com

            ·提升MD5加密安全性,解决办法

                1.先明文加盐,然后再进行MD5。即明文后拼接字符串(此时拼接的字符串要 足够长+足够咸+足够复杂),再进行MD5加密。如:#define salt @"1342*&%&shlfhs390(*^^6R%@@KFGKF"

                2.先加密+乱序

                3.乱序|加盐,多次MD5加密等

                4.使用消息认证机制HMAC:给定一个"秘钥",对明文进行加密,并且做"两次散列"!-> 得到的结果,还是 32 个字符,相对安全(KEY是服务器传给你的,不是你写死的)。

                    4.1 消息认证机制(HMAC)原理

                    消息的发送者和接收者有一个共享密钥,发送者使用共享密钥对消息加密计算得到MAC值(消息认证码)。

                    消息接收者使用共享密钥对消息加密计算得到MAC值,比较两个MAC值是否一致。

                    4.2 使用:客户端需要在发送的时候把(消息)+(消息·HMAC)一起发送给服务器;服务器接收到数据后,对拿到的消息用共享的KEY进行HMAC,比较是否一致,如果一致则信任。

iOS实际开发中Hash加密应用场景及优化

2.3对称加密算法AES和DES

    采用单钥密码系统加密方式。同一个密钥可以同时用作信息的加密和解密。

    对称加密的特点

           1. 加密速度快,可加密大文件 

           2. 密文可逆,加密和解密的过程是可逆的,一旦密钥泄露,就会导致暴露

           3. 加密后编码找不到对应字符,会出现乱码,一般结合base64 

    经典算法

            DES 数据加密标准

            AES 高级加密标准(基于DES)

提示:加密过程是先加密,再base64编码; 解密过程是先base64解码,再解密 (base64是为了可读性,不然会出现乱码)

2.4 非对称加密RSA

    ·非对称加密的特点

        使用 公钥 加密,使用 私钥 解密

        使用 私钥 加密,使用 公钥 解密(私钥签名,公钥验签)

        公钥是公开的,私钥保密

        加密处理安全,但是性能极差

    ·经典算法-->RSA

# MAC上生成公钥、私钥的方法 

1.打开终端,切换到自己想输出的文件夹下

2.输入指令:openssl(openssl是生成各种秘钥的工具,mac已经嵌入)

3.输入指令:genrsa -out rsa_private_key.pem 1024 (生成私钥,java端使用的)

4.输入指令:rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout (生成公钥)

5.输入指令:pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt(私钥转格式,在ios端使用私钥解密时用这个私钥)

注意:在MAC上生成三个.pem格式的文件,一个公钥,两个私钥,都可以在终端通过指令vim xxx.pem 打开,里面是字符串,第三步生成的私钥是java端用来解密数据的,第五步转换格式的私钥iOS端可以用来调试公钥、私钥解密(因为私钥不留在客户端)

iOS端公钥加密私钥解密、java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不能私钥加密公钥解密,只能用于验签

参考资料:

App安全https://www.cnblogs.com/fengmin/p/8178217.html

iOS加密详解https://www.jianshu.com/p/cee228aabdbc

相关文章

网友评论

    本文标题:iOS 数据加密(常用加密算法)

    本文链接:https://www.haomeiwen.com/subject/imcbtktx.html