摘录 只供自己学习
1.typeof 和 __typeof,typeof 的区别?
__typeof __() 和 __typeof() 是 C语言 的编译器特定扩展,因为标准 C 不包含这样的运算符。 标准 C
要求编译器用双下划线前缀语言扩展(这也是为什么你不应该为自己的函数,变量等做这些)
typeof() 与前两者完全相同的,只不过去掉了下划线,同时现代的编译器也可以理解。
所以这三个意思是相同的,但没有一个是标准C,不同的编译器会按需选择符合标准的写法
2.谈谈对UIResponder的理解
UIResponder类是专门用来响应用户的操作处理各种事件的,包括触摸事件(Touch Events)、运动事件(Motion Events)、
远程控制事件(Remote Control Events)。我们知道UIApplication、UIView、UIViewController这几个
类是直接继承自UIResponder,所以这些类都可以响应事件。当然我们自定义的继承自UIView的View以及自定义
的继承自UIViewController的控制器都可以响应事件
3.loadView的作用?
loadView方法会在每次访问UIViewController的view(比如controller.view、self.view)而且view为
nil时会被调用,此方法主要用来负责创建UIViewController的view(重写loadView方法,并且不需要调用
[super loadView])
这里要提一下 [super loadView],[super loadView]做了下面几件事。
1.它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view,
如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,如果没有
明显地传xib文件名,就会加载跟UIViewController同名的xib文件
2.如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性
在需要自定义UIViewController的view时,可以通过重写loadView方法且不需要调用[super loadView]方法
4.使用 drawRect有什么影响?
drawRect 方法依赖 Core Graphics 框架来进行自定义的绘制
缺点:它处理 touch 事件时每次按钮被点击后,都会用 setNeddsDisplay 进行强制重绘;而且不止一次,
每次单点事件触发两次执行。这样的话从性能的角度来说,对 CPU 和内存来说都是欠佳的。特别是如果在我们的
界面上有多个这样的UIButton 实例,那就会很糟糕了。这个方法的调用机制也是非常特别. 当你调用
setNeedsDisplay 方法时, UIKit 将会把当前图层标记为 dirty,但还是会显示原来的内容,直到下一次的视
图渲染周期,才会将标记为 dirty 的图层重新建立 Core Graphics 上下文,然后将内存中的数据恢复出来,
再使用 CGContextRef 进行绘制
5.keyWindow 和 delegate的window有何区别
delegate.window 程序启动时设置的window对象。
keyWindow 这个属性保存了[windows]数组中的[UIWindow]对象,该对象最近被发送了[makeKeyAndVisible]消息
一般情况下 delegate.window 和 keyWindow 是同一个对象,但不能保证keyWindow就是
delegate.window,因为keyWindow会因为makeKeyAndVisible而变化,例如,程序中添加了一个悬浮窗口,
这个时候keywindow就会变化
6.说一下 JS 和 OC 互相调用的几种方式?
js调用oc的三种方式:
@根据网页重定向截取字符串通过url scheme判断
@替换方法.context[@"copyText"]
@注入对象:遵守协议JSExport,设置context[@
oc调用js代码两种方式
@通过webVIew调用 webView stringByEvaluatingJavaScriptFromString: 调用
@通过JSContext调用[context evaluateScript:]
7.在使用 WKWebView 时遇到过哪些问题?
白屏问题,Cookie 问题,在WKWebView上直接使用NSURLProtocol无法拦截请求,在WKWebView 上通过
loadRequ发起的post请求body数据被丢失,截屏问题等
白屏
在WKWebView上总体的内存占用比较大的时候 webContent进程会崩溃 从而出现白屏问题
@采用WKNavigationDelegate
在iOS9之后WKNavigationDelegate的一个函数
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0));
当WKWebView总体内存占用过大,页面即将白屏的时候,系统会调用上面的某种函数,我们在该函数里执行
[webView reload] (这个时候webView.URL取值尚不为nil)解决白屏问题
@并不是所有的白屏都会经过上述方法 也可能是webView.titile被置空了 可以在viewWillAppear的时候判断
是否webView.titile是否被置空了 这个时候[webView reload]
Cookie 问题
WKWebView Cookie的问题在于WKWebView发起的请求不会自动带上存储于NSHTTPCookieStorage容器中的饼干
无法解决
WKProcessPool
可以实现多个WKWebView之间共享的Cookie数据。不过WKWebView WKProcessPool实例在应用杀进程重启后会被重置,导致WKProcessPool中的Cookie,会话Cookie数据丢失,目前也无法实现WKProcessPool实例本地化保存
解决方法
a.WKWebView loadRequest前,在请求标头中设置Cookie,解决首个请求Cookie带不上的问题
WKWebView * webView = [ WKWebView新] ;
NSMutableURLRequest *请求= [ NSMutableURLRequest requestWithURL :[ NSURL URLWithString : @ “ http://h5.qzone.qq.com/mqzone/index” ] ] ;
[请求的addValue : @ “SKEY = skeyValue” forHTTPHeaderField : @ “曲奇” ] ;
[ webView loadRequest : request ] ;
b.通过document.cookie设置Cookie解决后续页面(同域)Ajax,iframe请求的Cookie问题
document.cookie()无法跨域设置cookie
WKUserContentController * userContentController = [ WKUserContentController新] ;
WKUserScript * cookieScript = [ [ WKUserScript alloc ] initWithSource : @ “ document.cookie ='skey = skeyValue';” injectionTime : WKUserScriptInjectionTimeAtDocumentStart for MainFrameOnly : NO ] ;
[ userContentController addUserScript : cookieScript ] ;
但是无法解决302请求的Cookie问题
可以在
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
方法里面拦截302请求 在请求标头中带上cookie并重新加载请求
在WKWebView上直接使用NSURLProtocol无法拦截请求
WKWebView在独立于应用进程之外的进程中执行网络请求,请求数据不通过主进程,因此,在WKWebView上直接使用NSURLProtocol无法拦截请求
+ [WKBrowsingContextController registerSchemeForCustomProtocol:]
通过注册HTTP方案后WKWebView将可以使用NSURLProtocol拦截http(s)请求
Class cls = NSClassFromString(@"WKBrowsingContextController”);
SEL sel = NSSelectorFromString(@"registerSchemeForCustomProtocol:");
if ([(id)cls respondsToSelector:sel]) {
// 注册http(s) scheme, 把 http和https请求交给 NSURLProtocol处理
[(id)cls performSelector:sel withObject:@"http"];
[(id)cls performSelector:sel withObject:@"https"];
}
有缺陷
在WKWebView 上通过loadRequ发起的post请求body数据被丢失
由于进程间的通信性能问题造成的
1.替换请求方案 生成新的post request2 同时,把request1的主体连接复制到request2的header中
2.通过[-WKWebView loadRequest:] 加载新的post请求request2
3.通过+ [WKBrowsingContextController registerSchemeForCustomProtocol:]注册方案:post://
4.注册NSURLProtocol拦截请求 替换新的请求方案 生成新的请求request3 将request2的body初始复制到request3的body中 并使用NSURLConnection加载request3 最后通过NSURLProtolClient将加载结果返回WKWebView
截屏问题
8.网络七层协议
* 应用层:
1.用户接口、应用程序;
2.Application典型设备:网关;
3.典型协议、标准和应用:TELNET、FTP、HTTP
* 表示层:
1.数据表示、压缩和加密presentation
2.典型设备:网关
3.典型协议、标准和应用:ASCLL、PICT、TIFF、JPEG|MPEG
4.表示层相当于一个东西的表示,表示的一些协议,比如图片、声音和视频MPEG。
* 会话层:
1.会话的建立和结束;
2.典型设备:网关;
3.典型协议、标准和应用:RPC、SQL、NFS、X WINDOWS、ASP
* 传输层:
1.主要功能:端到端控制Transport;
2.典型设备:网关;
3.典型协议、标准和应用:TCP、UDP、SPX
* 网络层:
1.主要功能:路由、寻址Network;
2.典型设备:路由器;
3.典型协议、标准和应用:IP、IPX、APPLETALK、ICMP;
* 数据链路层:
1.主要功能:保证无差错的疏忽链路的data link;
2.典型设备:交换机、网桥、网卡;
3.典型协议、标准和应用:802.2、802.3ATM、HDLC、FRAME RELAY;
* 物理层:
1.主要功能:传输比特流Physical;
2.典型设备:集线器、中继器
3.典型协议、标准和应用:V.35、EIA/TIA-232.
9.Http 和 Https 的区别?Https为什么更加安全?
* 区别
1.HTTPS 需要向机构申请 CA 证书,极少免费。
2.HTTP 属于明文传输,HTTPS基于 SSL 进行加密传输。
3.HTTP 端口号为 80,HTTPS 端口号为 443 。
4.HTTPS 是加密传输,有身份验证的环节,更加安全。
* 安全
SSL(安全套接层) TLS(传输层安全)
以上两者在传输层之上,对网络连接进行加密处理,保障数据的完整性,更加的安全。
10.HTTPS的连接建立流程
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。在传输的过程中会涉及到三个密钥:
服务器端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来进行对称加密
![](https://img.haomeiwen.com/i2056006/81524573d0a93b2e.png)
如上图,HTTPS连接过程大致可分为八步:
1、客户端访问HTTPS连接。
客户端会把安全协议版本号、客户端支持的加密算法列表、随机数C发给服务端。
2、服务端发送证书给客户端
服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,服务端会在该算法列表中,选择一种对称算法(如AES)、一种公钥算法(如具有特定秘钥长度的RSA)和一种MAC算法发给客户端。
服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
在发送加密算法的同时还会把数字证书和随机数S发送给客户端
3、客户端验证server证书
会对server公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。
4、客户端组装会话秘钥
如果公钥合格,那么客户端会用服务器公钥来生成一个前主秘钥(Pre-Master Secret,PMS),并通过该前主秘钥和随机数C、S来组装成会话秘钥
5、客户端将前主秘钥加密发送给服务端
是通过服务端的公钥来对前主秘钥进行非对称加密,发送给服务端
6、服务端通过私钥解密得到前主秘钥
服务端接收到加密信息后,用私钥解密得到主秘钥。
7、服务端组装会话秘钥
服务端通过前主秘钥和随机数C、S来组装会话秘钥。
至此,服务端和客户端都已经知道了用于此次会话的主秘钥。
8、数据传输
客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。
同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。
11.解释一下 三次握手 和 四次挥手
三次握手
1.由客户端向服务端发送 SYN 同步报文。
2.当服务端收到 SYN 同步报文之后,会返回给客户端 SYN 同步报文和 ACK 确认报文。
3.客户端会向服务端发送 ACK 确认报文,此时客户端和服务端的连接正式建立。
建立连接
1.这个时候客户端就可以通过 Http 请求报文,向服务端发送请求
2.服务端接收到客户端的请求之后,向客户端回复 Http 响应报文。
四次挥手
当客户端和服务端的连接想要断开的时候,要经历四次挥手的过程,步骤如下:
1.先由客户端向服务端发送 FIN 结束报文。
2.服务端会返回给客户端 ACK 确认报文 。此时,由客户端发起的断开连接已经完成。
3.服务端会发送给客户端 FIN 结束报文 和 ACK 确认报文。
4.客户端会返回 ACK 确认报文到服务端,至此,由服务端方向的断开连接已经完成
12.TCP 和 UDP的区别
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
13.Cookie和Session
cookie
1.用户与服务器的交互
cookie主要是用来记录用户状态,区分用户,状态保存在客户端。cookie功能需要浏览器的支持。如果浏览器不支持cookie(如大部分手机中的浏览器)或者把cookie禁用了,cookie功能就会失效。
![](https://img.haomeiwen.com/i2056006/415ffa5d627a6a27.png)
a).首次访问amazon时,客户端发送一个HTTP请求到服务器端 。服务器端发送一个HTTP响应到客户端,其中包含Set-Cookie头部
b).客户端发送一个HTTP请求到服务器端,其中包含Cookie头部。服务器端发送一个HTTP响应到客户端
c).隔段时间再去访问时,客户端会直接发包含Cookie头部的HTTP请求。服务器端发送一个HTTP响应到客户端
2.cookie的修改和删除
在修改cookie的时候,只需要新cookie覆盖旧cookie即可,在覆盖的时候,由于Cookie具有不可跨域名性,注意name、path、domain需与原cookie一致
删除cookie也一样,设置cookie的过期时间expires为过去的一个时间点,或者maxAge = 0(Cookie的有效期,单位为秒)即可
3、cookie的安全
事实上,cookie的使用存在争议,因为它被认为是对用户隐私的一种侵害,而且cookie并不安全
HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。
a).如果不希望Cookie在HTTP等非安全协议中传输,可以设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。
b).此外,secure属性并不能对Cookie内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对Cookie内容加密、解密,以防泄密。
c).也可以设置cookie为HttpOnly,如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS(跨站脚本攻击)攻击
Session
Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
![](https://img.haomeiwen.com/i2056006/953b36a319763a3e.png)
* 如图:
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为SessionId)
如果已包含则说明以前已经为此客户端创建过session,服务器就按照SessionId把这个session检索出来,使用(检索不到,会新建一个)
如果客户端请求不包含SessionId,则为此客户端创建一个session并且生成一个与此session相关联的SessionId,SessionId的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个SessionId将被在本次响应中返回给客户端保存。
保存这个SessionId的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把SessionId传递回服务器。
Cookie 和Session 的区别:
* 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
* 2、cookie相比session不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
* 3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
* 4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。而session存储在服务端,可以无限量存储
* 5、所以:将登录信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie中
## [#](https://ios.nobady.cn/Network.html#_7-dns%E6%98%AF%E4%BB%80%E4%B9%88)
14.DNS是什么
因特网上的主机,可以使用多种方式标识,比如主机名或IP地址。一种标识方法就是用它的主机名(hostname),比如·www.baidu.com、www.google.com、gaia.cs.umass.edu等。这方式方便人们记忆和接受,但是这种长度不一、没有规律的字符串路由器并不方便处理。还有一种方式,就是直接使用定长的、有着清晰层次结构的IP地址,路由器比较热衷于这种方式。为了折衷这两种方式,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。
* DNS是:
1、一个由分层的DNS服务器实现的分布式数据库
2、一个使得主机能够查询分布式数据库的应用层协议
* DNS服务器通常是运行BIND软件的UNIX机器,DNS协议运行在UDP上,使用53号端口
* DNS通常是由其他应用层协议所使用的,包括HTTP、SMTP等。其作用则是:将用户提供的主机名解析为IP地址
* DNS的一种简单设计就是在因特网上只使用一个DNS服务器,该服务器包含所有的映射。很明显这种设计是有很大的问题的:
单点故障:如果该DNS服务器崩溃,全世界的网络随之瘫痪
通信容量:单个DNS服务器必须处理所有DNS查询
远距离的集中式数据库:单个DNS服务器必须面对所有用户,距离过远会有严重的时延。
维护:该数据库过于庞大,还需要对新添加的主机频繁更新。
所以,DNS被设计成了一个分布式、层次数据库
15.DNS解析过程
以www.163.com为例:
客户端打开浏览器,输入一个域名。比如输入www.163.com,这时,客户端会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问
16.UIView动画与核心动画的区别?
核心动画只作用在layer
核心动画修改的值都是假象 它的真实位置没有发生变化
当需要与用户进行交互时用UIView动画 不需要与用户进行交互时两个都可以
17.当我们要做一些基于 CALayer 的动画时,有时需要设置 layer 的锚点来配合动画,这时候我们需要注意什么
设置秒点可能会引起原来position的变化
// 为 layer 的动画设置不同的 anchor point,但是又不想改变 view 原来的 position,则需要做一些转换。
- (void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view {
// 分别计算原来锚点和将更新的锚点对应的坐标点,这些坐标点是相对该 view 内部坐标系的。
CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x,
view.bounds.size.height * view.layer.anchorPoint.y);
CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x,
view.bounds.size.height * anchorPoint.y);
// 如果当前 view 有做过 transform,这里要同步计算。
oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);
newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
// position 是当前 view 的 anchor point 在其父 view 的位置。
CGPoint position = view.layer.position;
// anchor point 的改变会造成 position 的改变,从而影响 view 在其父 view 的位置,这里把这个位移给计算回来。
position.x = position.x + newPoint.x - oldPoint.x;
position.y = position.y + newPoint.y - oldPoint.y;
view.translatesAutoresizingMaskIntoConstraints = YES;
view.layer.anchorPoint = anchorPoint; // 设置了新的 anchor point 会改变位置。
view.layer.position = position; // 通过在 position 上做逆向偏移,把位置给移回来。
}
18.如何计算图片加载内存中所占的大小
图片内存大小的计算公式 宽度 * 高度 * bytesPerPixel/8。
bytesPerPixel : 每个像素所占的字节数。
RGBA颜色空间下 每个颜色分量由32位组成
所以一般图片的计算公式是 wxhx4
19.isa指针有哪两种类型?
纯指针,指向内存地址
NON_POINTER_ISA,除了内存地址,还存有一些其他信息
20.Objective-C 如何实现多重继承?
Object-c的类没有多继承,只支持单继承,如果要实现多继承的话,可使用如下几种方式间接实现
* 通过组合实现
A和B组合,作为C类的组件
* 通过协议实现
C类实现A和B类的协议方法
* 消息转发实现
forwardInvocation:方法
21.runtime 如何实现 weak 属性?
weak 此特质表明该属性定义了一种「非拥有关系」(nonowning relationship)。为这种属性设置新值时,设置方法既不持有新值(新指向的对象),也不释放旧值(原来指向的对象)。
runtime 对注册的类,会进行内存布局,从一个粗粒度的概念上来讲,这时候会有一个 hash 表,这是一个全局表,表中是用 weak 指向的对象内存地址作为 key,用所有指向该对象的 weak 指针表作为 value。当此对象的引用计数为 0 的时候会 dealloc,假如该对象内存地址是 a,那么就会以 a 为 key,在这个 weak 表中搜索,找到所有以 a 为键的 weak 对象,从而设置为 nil。
runtime 如何实现 weak 属性具体流程大致分为 3 步:
1、初始化时:runtime 会调用 objc_initWeak 函数,初始化一个新的 weak 指针指向对象的地址。
2、添加引用时:objc_initWeak 函数会调用 objc_storeWeak() 函数,objc_storeWeak() 的作用是更新指针指向(指针可能原来指向着其他对象,这时候需要将该 weak 指针与旧对象解除绑定,会调用到 weak_unregister_no_lock),如果指针指向的新对象非空,则创建对应的弱引用表,将 weak 指针与新对象进行绑定,会调用到 weak_register_no_lock。在这个过程中,为了防止多线程中竞争冲突,会有一些锁的操作。
3、释放时:调用 clearDeallocating 函数,clearDeallocating 函数首先根据对象地址获取所有 weak 指针地址的数组,然后遍历这个数组把其中的数据设为 nil,最后把这个 entry 从 weak 表中删除,最后清理对象的记录
22.runtime如何通过selector找到对应的IMP地址?
每一个类对象中都一个对象方法列表(对象方法缓存)
类方法列表是存放在类对象中isa指针指向的元类对象中(类方法缓存)。
方法列表中每个方法结构体中记录着方法的名称,方法实现,以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应的方法实现。
当我们发送一个消息给一个NSObject对象时,这条消息会在对象的类对象方法列表里查找。
当我们发送一个消息给一个类时,这条消息会在类的Meta Class对象的方法列表里查找。
23.怎么理解Objective-C是动态运行时语言
主要是将数据类型的确定由编译时,推迟到了运行时
简单来说 运行时机制使我们直到运行时才去决定一个对象的类别 以及调用该类别对象指定方法
多态: 不同对象以自己的方式响应相同的消息的能力叫做多态
24.对称加密和非对称加密的区别?
1、对称加密又称公开密钥加密,加密和解密都会用到同一个密钥,如果密钥被攻击者获得,此时加密就失去了意义
常见的对称加密算法有DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
2、非对称加密又称共享密钥加密,使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公有密钥;公钥加密只
能用私钥来解密,私钥加密只能用公钥来解密。常见的公钥加密算法有:RSA、ElGamal、背包算法、Rabin(RSA的特例)、
迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法)
25简述 SSL 加密的过程用了哪些加密方法,为何这么作
SSL 加密,在过程中实际使用了 对称加密 和 非对称加密 的结合。主要的考虑是先使用 非对称加密 进行连接,
这样做是为了避免中间人攻击秘钥被劫持,但是 非对称加密 的效率比较低。所以一旦建立了安全的连接之后,就
可以使用轻量的 对称加密
26.iOS的签名机制是怎么样的
签名机制:
先将应用内容通过摘要算法,得到摘要
再用私钥对摘要进行加密得到密文
将源文本、密文、和私钥对应的公钥一并发布
验证流程:
查看公钥是否是私钥方的
然后用公钥对密文进行解密得到摘要
将APP用同样的摘要算法得到摘要,两个摘要进行比对,如果相等那么一切正常
网友评论