腾讯二面复盘2020.8.12
1.https是如何实现加密的
常用的加密方式:对称加密、非对称加密
(1)对称加密
加密和解密使用相同**的加密算法。**是控制加密和解密过程的指令。算法是一组规则,规定如何进行加密和解密。
**的形式:
采用单钥密码系统的加密方法,同一个**可以同时用作信息的加密和解密,这种方式称为对称加密,也成为单**加密。
优缺点:
优点是算法公开,算法计算量小,加密速度快,加密效率高。
缺点是**管理的安全性很低,加密和解密都使用同一组**,在**发送的过程中容易被第三方截取,导致第三方也可以**密文。
具体实现:
在每次发送真实数据之前,服务器先生成一把**,然后先把**传输给客户端,之后服务器给客户端发送真实数据的时候,会用这把**对数据进行加密,客户端收到加密数据之后,用**进行解密。
(2)非对称加密
非对称加密需要有两个**,公钥和私钥,公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密,因为加密和解密使用的是两个不同的**,所以叫做非对称算法。
公钥和私钥是一对,传输双方均有自己的一对**,一共四个。
优缺点:
非对称**的算法复杂,安全性依赖与算法和**。非对称算法的保密性比较好,它消除了用户交换**的需要。
由于算法复杂,加密解密速度没有对称加密速度快。
具体实现:
客户端要向服务器发送消息,客户端和服务器产生一对用于加密和解密的公钥和私钥。
客户端的私钥保密,公钥告诉服务器,服务器的私钥保密,服务器的公钥告诉客户端。
客户端给服务器发送消息时,客户端用服务器的公钥加密信息,服务器收到消息后,用自己的私钥解密消息。
https采用的加密:
https结合对称加密和非对称加密两种方式,我们采用非对称加密的方式传输对称加密过程中的**,之后用对称加密的方式传输数据。
服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥后,生成一把**(用于对称加密),然后用服务器的公钥对这把**进行加密,之后再把**传给服务器,服务器收到之后进行解密,最后服务器安全得到这把**,而客户端同样有这把**,这样就可以实现对称加密。
证书:
非对称加密的不足:中间人截取服务器发给客户端的公钥,然后用自己的公钥冒充服务器的公钥发给客户端
公钥被掉包,是因为客户端无法分辨传回公钥的到底是中间人,还是服务器,这也是密码学中的身份验证问题。
在HTTPS中,使用 证书 + 数字签名 来解决这个问题。HTTPS就是使用SSL/TLS协议进行加密传输,让客户端拿到服务器的公钥,然后客户端随机生成一个对称加密的秘钥,使用公钥加密,传输给服务端,后续的所有信息都通过该对称秘钥进行加密解密,完成整个HTTPS的流程。
2.stl中的map如何实现
map简介
map是STL的一个关联容器(associative container)之一,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
一个map是一个键值对序列,
即(key ,value)对。它提供基于key的快速检索能力,在一个map中key值是唯一的。map提供双向迭代器,即有从前往后的(iterator),也有从后往前的(reverse_iterator)。
map中key值是唯一
例子:如果已存在一个键值对(编号,用户名):(1001,"jack"),而我们还想插入一个键值对(1001,"mike") 运行时会报错(不是报错,准确的说是,返回插入不成功!)。而我们又的确想这样做,即一个键对应多个值,幸运的是multimap可是实现这个功能。
map中的类型定义
关联数组(associative array)是最有用的用户定义类型之一,经常内置在语言中用于文本处理等。一个关联数组通常也称为map,有时也称字典(dictionary),保存一对值。第一个值称为key、第二个称为映射值mapped-value。
上一篇: 使用ajax防止页面缓存的代码
下一篇: MySQL优化器可选开关详解