首页投稿(暂停使用,暂停投稿)iOS Developer面试

史上最全iOS端数据加密类

2017-09-26  本文已影响444人  laitys

前言

iOS系统由于其封闭性其安全系数要比安卓高不少,但是依然有插件可以捕捉到iOS端敏感数据,特别是以plist文件形式进行存储的数据,Plist 文件主要用于存储用户设置及 App 的配置信息,但 App 可能使用 Plist 文件存储明文的用户名、密码 或其它一些个人敏感信息。而保存在 Plist 文件中的二进制格式文件数据则可以使用 Plist 文件编辑器(如 plutil)进行查看或修改,即使在一个没有越狱的设备上,plist 文件内容也可以通过工具 iExplorer 获取。对 于以编码、未加密或弱加密形式存储的敏感信息就可能会导致敏感信息泄露了。这就需要对一些敏感信息做一些本地加密存储和解密读取,其实,对于用户的一些敏感信息,建议最好使用归档解档的方式做本地数据持久化。

简介

最近项目由一家专业的测试公司做了次渗透测试,测试出的主要是数据安全问题,对于攻击者,从iOS端获取到敏感数据主要有以下三种方式:

  • 恶意程序
    借助iOS系统的安全弱点,攻击者可以设计出一种远程偷取iPhone上文件的恶意程序。
    备份
    当iPhone连接至iTunes后,如果iPhone信任了所连接的电脑后,iTunes将自动对设备上的所有数据进行备份。通过备份,敏感数据也将会保存到电脑上。因此,攻击者如果可以接触到那台电脑,则可以通过备份文件读取到敏感信息。
    物理接触
    用户iPhone的丢失或被盗非常常见。在这两种情形下,攻击者都将可以物理接触到设备,并读取设备上存储的敏感信息。
    所以,对本地持久化的数据加密显得尤为重要,加密方式有很多种:MD5、AES(ECB/CBC)、RSA等,根据不同需求选择加密方法,和后台交互过程的加密可以和后台自行商定。

加密类

调用示例

  //
  //  WKCryptorToolDemoVC.m
  //  -对称加密加密演练-
  //
  //  Created by egs on 2017/9/26.
  //  Copyright © 2017年 恋guang年. All rights reserved.
  //

  #import "WKCryptorToolDemoVC.h"

  #import "CryptorTools.h"
 @interface UIViewController ()

 @end

 @implementation WKCryptorToolDemoVC 

 - (void)viewDidLoad {
     [super viewDidLoad];
  }

 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:
(UIEvent *)event
   {

      ////  非对称加密
     //创建加密工具对象
      CryptorTools *tool = [[CryptorTools alloc]init];
     //加密内容
      NSString *content = @"i love you";
      //加载公钥
     [tool loadPublicKeyWithFilePath:[[NSBundle 
     mainBundle]pathForResource:@"rsacert.der" ofType:nil]];
     //加密
     NSString *encodeStr = [tool RSAEncryptString:content];

     //加载私钥 password是导出P12文件的密码
[tool loadPrivateKey:[[NSBundle mainBundle]pathForResource:@"p.p12" ofType:nil] password:@"815476562"];
       //解密
     NSString *decondeStr = [tool RSADecryptString:encodeStr];
     NSLog(@"RSA 加密结果 = %@ , 解密结果 =%@",encodeStr,decondeStr);
  }



 /**
  *  对称加密 加密和解密用的同一把密钥
 */


  - (void)test
  {
      //声明一个密钥
       NSString *key = @"itcast";
      //要加密的内容
      NSString *content = @"i love you";

//ECB 加密和界面 电子密码本,就是每个块都是独立加密的 AES高级加密标准
NSString *encodeStr = [CryptorTools AESEncryptString:content keyString:key iv:nil];
NSString *decondeStr = [CryptorTools AESDecryptString:encodeStr keyString:key iv:nil];
NSLog(@" ----ECB加密结果 = %@ , 解密结果 = %@-----",encodeStr,decondeStr);

//  CBC:密码块链,每个明文块的加密结果都会参与下一个块的加密,使用一个密钥和一个初始化向量对数据进行加密转换.开发中推荐使用CBC,ECB少用.
//声明iv
uint8_t iv[9] = {1,2,3,4,5,6,7,8,11};
//将iv转换成NSData
NSData *ivData = [NSData dataWithBytes:iv length:sizeof(iv)];
NSString *encryStr = [CryptorTools AESEncryptString:content keyString:key iv:ivData];
NSString *decryStr = [CryptorTools AESDecryptString:encryStr keyString:key iv:ivData];
NSLog(@" ----CBC加密结果 = %@ , 解密结果 = %@-----",encryStr,decryStr);
 }
  @end
上一篇 下一篇

猜你喜欢

热点阅读