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

【资料整理】

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341