NO1.加密-授权-协议

NO1.加密-授权-协议

零蚀

  1. 加密原理
  2. Base64
  3. 压缩和解压
  4. 序列化
  5. Hash
  6. 字符集
  7. 登陆授权
  8. TCP/IP协议族
  9. 长连接简介
  10. HTTPS

  • 加密原理

    • 密码学

    古典密码学 :密码学起源于古典密码学,早起运用移位式加密,加密算法:缠绕后书写,密钥:⽊棒的尺⼨,后续发展到替换加密:每个字母对应码表上的字符,加密算法:替换⽂文字,密钥:替换的码表。
    现代密码学 :适用任何二进制加密,对称加密和非对称加密是目前最为普遍的算法, 对称加密 类似于古典密码学的替换加密。 因为在通信领域网络是完全不可信的,因为数据的发送方式是像广播的发散性的,群体接收,所以可以盗取数据。对称加密分为DES,AES,DES由于密钥很短,所以弃用了,而AES密钥长,所以还在沿用。密钥短可能在暴力破解下,被解析出来,用过幻影破解wifi跑字典的人应该了解。非对称加密 用算法溢出来进行加解密的原理。 非对称加密关键在于加密密钥即使泄露也不会对信息有什么影响,加密密钥称为公钥,解密密钥为私钥。公钥和私钥是可以互相解的,公钥有时是可以被计算出来的(椭圆曲线算法),公钥有时可以被私钥算出来。私钥和公钥的重要部分是一致,非对称加密RSA用来加密签名,速度慢,DSA速度快,因为其中还专门设计生成签名功能。

    • 对称加密视图
    密钥
    密钥
    发送原数据
    密文
    接受原数据
    加密算法
    解密算法
    对称加密示图
    • 非对称加密示图
    加密密钥 公钥
    解密密钥 私钥
    发送原数据
    密文
    接受原数据
    加密算法
    解密算法
    非对称加密示图
    • 签名验证

    签名不是加密方式,一般在传输重要信息时,一方用公钥B加密,私钥A签名,另一方可以用私钥B 解密,公钥A验证。

    私钥/签名
    公钥/验证
    发送原数据
    签名数据&密文
    接受原数据
    加密算法
    解密算法
    非对称加密示图

    登陆时候用到的密码,也是用来验证,没有其他意义。


  • Base64

    1. 将二进制数据(广义上非文本数据)转化为64个字符组成的字符串编码算法(az,AZ,0~9,+ /),对应的Base64的编码表。
    2. 作用,是将原数据具有字符串的特性,比如放在URL里面进行传输,可以保存文件,可以通过聊天软件进行文本传输。 将非字符串转成字符串。所以Base64不是用来加密的,也不是提高效率的Base64会增长远来数据的1/3长度。
    3. 变种:Base58 去除了0,大些O,L,I,+,/,方便辨识,方便双击复制。URL encoding

  • 压缩和解压

    1. 常用的压缩方法有DEFLATE,JPEG,MP3。常见会用zip的打包,打包也被称为归档, 归档的同时进行压缩。JPEG对jpg图片进行压缩,MP3对音频文件进行压缩。
    2. 编码的解释是,数据格式转换中不会有数据的改变和缺失,所以压缩也属于编码。压缩算法的本质:比如将重复项归结为一个数字,3:100等,或者将二进制的长度变成高进制,来减短数据的长度。

  • 序列化

    1. 原理:将数据转换为线型的,可以通用解析的格式。比如:序列化为json格式{‘name’:‘kk’…age:10},这个数据线性化后,可以被存储,可以被传输,可以和外界通信。
    2. 序列化不属于编码,他只是内存里存的一堆数据。

  • Hash

    1. 将数据转化为指定大小范围(通常小的范围)的数据,作用:作为摘要,数字指纹,例如有一个对象,有很多属性,但是我用1001,代替它,当我需要调用一个大数据时,我直接拿1001,所以hash是一种验证方式。
    2. hash要解决碰撞率(冲突率),所以Hash有很多算法,里面包括MD5,SHA1,SHA256,
    3. 实际用途:数据完整性验证,快速查找(java里的HashCode见下文)。 隐私保护,如果网站的数据库给盗了,明文存储直接会信息泄露,所以要用hash处理。
    4. 加盐,因为Hash不可逆,不能解密,但是可以通过记录映射关系的方法来破解签名,那个映射表称为彩虹表,所以就有了加盐,例 MD5(‘盐’+(‘盐’+数据)),Hash是单向的,所以不是编码,Hash,Md5,。

⚠️java里重写equals()方法时算法时候要重写hashcode()。 原因hashCode()是采取你数据的所有指纹信息,就像我们在java里为什么xx.equals(“xx”),则么证明两个数据是相等的,怎么证明你是你,就是通过hashCode获取最够的指纹信息,来进行判别。

⚠️MD5 不是加密,不是编码,不可逆。


  • 字符集

    就是一个由整数像现实世界中的文字符号映射集合,例如ASCII码,ISO-8859,unicode(UTF-8,UTF-16)


  • 登陆授权

    • Cookie
      起源于购物车,现在的购物车存在于服务器,以前是打算存在本地,所以做了cookie

      • 示图,早期cookie原理
      Post / ...//host:... //param=value
      Http1 状态码//set-cookie //param=value
      客户端
      服务器

      Set-cookie是服务器通知客户端可以讲cookie存下来,每次客户端访问服务器再把它带出去,现在cookie已经在登陆,验证领域逐渐被抛弃。

      • 视图,早期登陆,使用cookie管理登陆状态
      1.username&password
      表示和客户端在交互了
      记下cookie/交互时发送
      客户端
      服务器
      创建会话
      • Cookie的作用:
      1. 绘画管理 : 登陆状态,购物车🛒 etc.
      2. 个性化 : 用户偏好,主题 etc.
      3. tracking : 追踪用户行为,通过第三方网站的记录,记录用户的点击数据,方便对用户的行为习惯进行画像。
      • Cookie攻击手段
      1. XSS:跨站脚本攻击,可能拿到cookie相关的重要信息,如登陆,然后发出。防御手段,在set-cookie:…HttpOnly ,后面添加这种信息,表示只是在http之间做交换,不能被提取。
      2. XSRF:跨站请求伪造,若最近有银行网站浏览信息,会直接拿到请求信息,直接将现金转走,不需要任何东西,cookie里面都有信息,抵御方案Referer,不同网站,不予响应。
    • Authorization

      • Basic
        基本格式:Authorization:Basic< username:password(Base64ed) >
        请求样式:
      get/user/1.1
      host:xxx
      Authorization:Basic 认证信息
      

      目前的使用的基本的都是https,https有加密系统,所以安全的多,唯一的问题时可能在本地破解,不然不会获取你的信息。

      • Bearer
        请求样式:获取token开进行验证。
      get/user/1.1
      host:xxx
      Authorization:Bearer <bearer token>
      
      • OAuth2
        第三方认证,授权时,授权方会确认第三方的身份信息,然后传递相关信息client_id,当这个授权之后,会返回授权码,由于之间可能被拦截(浏览器/中间环节是不可靠的)所以授权码只是证明,授权的结果是为获取token。授权码被第三方发送给服务器,服务器会发送一个信息给授权方,其中包含授权码和client_secret,client_secret是为了自己证明身份,证明了安全性,此时授权方 返回access token(Authorization Bearer:),授权结束。

      视图:

      1.client_id
      2.Authorization code
      3.Authorization code
      4.client_secret/Authorization code
      5.access token
      第三方客户端
      授权方 github/QQ类
      第三方服务器
      • Refresh Token

      在第5步,token会失效,或丢失,token都是有有效期,当token失效时需要,服务端会发送refresh然后服务端会将token失效掉,然后换取新的token,这个过程的唯一验证是服务器的client_secret。

      post/user/1.1
      refresh_token=xxxxx
      

  • TCP/IP协议族

    • TCP/IP的由来
      网络协议为什么要分层:一层不可以吗,为什么不直接传只要网络层和应用层不就够了,因为网络的不稳定,部分网络出现断线,瘫痪,等等情况,必然会发生重传,大数据会被切块传输(减少总体失败的平均耗时和流量),所以把数据传输直接调个功能模块,用来专门负责传输,其他层用来提供数据,数据如过丢了,它会负责重新传递,它负责数据分块等功能,来保证数据的稳定传输, 这就是TCP。
      除此之外,有些业务不需要重传,允许丢包,所以就有UDP。当UDP和TCP都有网络方面的功能,所以在UDP和TCP中又抽了一层,仅完成底层功能(比如单纯的传输),这就是IP层/网络层。

    视图:

    网络分层模型
    处理消息
    处理消息
    传输消息
    返回消息
    TCP传输层
    Http应用层
    IP网络层
    LINK数据链路层
    TCP传输层
    Http应用层
    IP网络层
    LINK数据链路层

    LINK是数据链路层,是以太网层,也可以把LINK里面的网线,路由器,当作物理层分出去


  • TCP连接

    • 连接视图:三次握手 (发送的是TCP消息)
    客户端
    服务端
    1我要发消息
    2知道了/我也要给你发了
    3我知道了你要给我发消息这个事了
    服务端
    • 关闭连接视图:四次握手
    客户端
    服务端
    1我不发消息了
    3数据传输结束
    2知道了
    4关闭
    客户端
    服务端

  • 长连接简介

    客户端可能是在内网里面,如我们手机就是在运营商的内网里,内网和外网链接需要网关,运营商开端口(网关)需要耗损资源,所以当长时间没有使用网络,运营商就会关闭网络。此时外界发消息来,端口已经关闭,所以长时间的业务,必须保持长链接,做法欺骗网关方式,使用心跳,一直发送信息保持联通。


  • HTTPS

    • Http over SSL
      Http建立在SSL基础之上,所以叫做https,https不是一个单纯的协议,在Http之下建立一个安全层(在应用层和网络层之间),用于保障Http 的加密传输。SSL :Secure Socket Layer(早期)->TLS Transport Layer Secure (现在 )。
      Https加密用的是对称加密,密钥用的是非对称处理过,每次发送都会加密,收到后解密,为什么不直接用非对称,因为非对称的速度太慢了。

    • Https连接

      1. 客户端请求TLS连接(TCP通信)
      2. 服务器返回证书(TCP通信)
      3. 客户端验证证书(TCP通信)
      4. 客户端确认证书,去和服务器协商这个用非对称加密过的的对称密钥(TCP通信)
      5. 用对称密钥连接(Http通信)
    • 流程细节

      • 首先客户端会发送信息给服务器
        请求建立连接,并且附加上一些需要的信息,比如我需要的TSL版本,加密套件Cipher Suite{对称加密,非对称加密,hash}(就是我能接受的加密方法),并且有客户端随机数。 ▶️当前客户端&服务器 持有{TSL,Cipher Suite{对称加密,非对称加密,hash},客户端随机数}
      ClientHello
      客户端
      服务器
      • 服务器返回信息
        服务器返回信息,包括,TSL,Cipher suit, hash,同时服务器返回一个服务器的随机数&服务器随机数。▶️当前客户端&服务器 持有{TSL,Cipher Suite{对称加密,非对称加密,hash},客户端随机数,服务器随机数}
      ServerHello
      服务器
      客户端
      • 服务器发送证书给客户端
        证书中包含了服务器的公钥,外层证书服务器地址,只是证明,这可能是来自服务器,所以提供了服务器签名,用来证明来路正确,中间层是为了证实这个信息是被这个公钥持有者所造,但不能说明,这个信息是谁出版的。所以由证书机构证明它的信息,为什么证书签发方可以证实我是我,那就是系统里的签发方根证书。▶️当前客户端&服务器 持有{TSL,Cipher Suite{对称加密,非对称加密,hash},客户端随机数,服务器随机数,服务器公钥 }
      证书
      服务器
      客户端

      证书模式:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L1jQaHJs-1577884055392)(media/15771850186405/15773474314115.jpg)]

      证书结构:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y9za36gd-1577884055393)(media/15771850186405/15773482293867.jpg)]

      • 非对称加密准主要密文给服务器(Pre-master-secret随机数),Pre-master-secret是对当前的所有的信息加密。▶️当前客户端&服务器 持有{TSL,Cipher Suite{对称加密,非对称加密,hash},客户端随机数,服务器随机数,服务器公钥 ,Pre-master-secret–>B}
      Pre-master-secret
      客户端
      服务器
      • 构造master-secret
        运算(客户端随机数+服务器随机数+Pre-master-secret)的数据得到Master-Secret。
        用master-secret计算密钥,可以得到以下:
        1. 客户端加密密钥
        2. 服务端加密密钥
        3. 客户端MAC Secret
        4. 服务端MAC Secret

      ▶️当前客户端&服务器 持有{TSL,Cipher Suite{对称加密,非对称加密,hash},客户端随机数,服务器随机数,服务器公钥 ,Pre-master-secret–>B,{客户端加密密钥,服务端加密密钥,客户端MAC Secret,服务端MAC Secret}}
      HMAC是改良版的hash,MAC Secret也是HMAC,用于验证,是否一致,从而来验证你是否是你。

      • 客户端发送Finish,验证签名通过,服务器发送信息。
      • Https通信开始。发出一连串没人看的懂的信息。

🔗Android Https 官方文档


🔗 前言
🔗 Android 网络列表
🔗 网络篇 前言 从HTTP说起
🔗 NO2.Retrofit和Http
🔗 NO3.从OkHttp看Http
🔗 NO4.剖析RxJava2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零蚀zero eclipse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值