iOS开发中的加密方式

iOS加密相关算法框架:CommonCrypto

1:对称加密: DES、3DES、AES

AES:AES又称高级加密标准,是下一代的加密算法标准,支持128、192、256位密钥的加密,加密和解密的密钥都是同一个。iOS一般使用ECB模式,16字节128位密钥。

AES算法主要包括三个方面:轮变化圈数密钥扩展

DES:数据加密标准,DES算法的入口参数有三个:KeyDataMode

3DES:3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。是DES向AES过渡的加密算法,是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

2.非对称加密:RSA加密

公钥加密,私钥解密;或者私钥数字签名,公钥验证。公钥和私钥是成对的,它们互相解密。

3. 哈希算法加密:MD5加密.SHA加密HMAC加密

MD5加密:对不同的数据加密的结果都是定长的32位字符。

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

HMAC加密:给定一个密钥,对明文加密,做两次“散列”,得到的结果还是32位字符串。

4. Base64加密

App安全,数字签名,App签名,重签名

因为应用实际上是一个加壳的ipa文件,但是有可能被砸壳甚至越狱手机下载的ipa包直接就是脱壳的,可以直接反编译,所以不要在plist文件、项目中的静态文件中存储关键的信息。所以敏感信息对称加密存储或者就存储到keychain里。而且加密密钥也要定期更换。

数字签名是通过HASH算法RSA加密来实现的。 我们将明文数据加上通过RSA加密的数据HASH值 一起传输给对方,对方可以解密拿出HASH值来进行验证。这个通过RSA加密HASH值数据,我们称之为数字签名。

App签名

OC数据类型

① 基本数据类型

② 指针数据类型

指针数据类型包括: 类classid

集合NSSet和数组NSArray区别:

③ 构造类型

构造类型包括:结构体、联合体

结构体和联合体的区别:

分配,会造成内存浪费。

property和属性修饰符

@property的本质ivar(实例变量) + setter + getter.

我们每次增加一个属性时内部都做了什么:

  • 5.给出 settergetter 方法对应的实现,在 setter 方法中从偏移量的位置开始赋值,在 getter 方法中从偏移量开始取值,为了能够读取正确字节数,系统对象偏移量的指针类型进行了类型强转。

修饰符:

下面分别解释

后四个属性应该主要就是为了提高开发规范,提示使用的人应该传什么样的值,如果违反了对规范值的要求,就会有警告。

weak修饰的对象释放则自动被置为nil的实现原理:

Runtime维护了一个weak表,存储指向某个对象的所有weak指针weak表其实是一个hash(哈希)表Key是所指对象的地址,Valueweak指针的地址数组(这个地址的值是所指对象的地址)。

weak 的实现原理可以概括一下三步:

成员变量ivar和属性property的区别,以及不同关键字的作用

成员变量: 成员变量的默认修饰符是@protected、不会自动生成set和get方法,需要手动实现、不能使用点语法调用,因为没有set和get方法,只能使用->

属性: 属性会默认生成带下划线的成员变量和setter/getter方法、可以用点语法调用,实际调用的是set和get方法。

注意:分类中添加的属性是不会自动生成 **setter/getter**方法的,必须要手动添加。

实例变量: class类进行实例化出来的对象为实例对象

关键字作用:

类簇

类簇是Foundation框架中广泛使用的设计模式。类簇在公共抽象超类下对多个私有的具体子类进行分组。以这种方式对类进行分组简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富度。类簇是基于抽象工厂设计模式的

常见的类簇有 NSStringNSArrayNSDictionary等。 以数组为例:不管创建的是可变还是不可变的数组,在alloc之后得到的类都是 __NSPlaceholderArray。而当我们 init 一个不可变的空数组之后,得到的是 __NSArray0;如果有且只有一个元素,那就是 __NSSingleObjectArrayI;有多个元素的,叫做 __NSArrayIinit 出来一个可变数组的话,都是 __NSArrayM

我们运用类簇的场景:

  1. 出现 bug 时,可以通过崩溃报告中的类簇关键字,快速定位 bug 位置。
  2. 在实现一些固定且并不需要经常修改的事物时,可以高效的选择类簇去实现。例:

文末推荐:iOS热门文集&视频解析

① Swift

② iOS底层技术

③ iOS逆向防护

④ iOS面试合集

⑤ 大厂面试题+底层技术+逆向安防+Swift

03-05 20:56