编码解码 Encoding&Decoding

URL encoding

  • 将URL中的保留字符使用百分号“%”进行编码
  • 目的:消除歧义,避免解析错误

媒体数据的编解码

  • 什么是图片、视频、音频的编解码?
  • 图片的编码:把图像数据写成JPG、PNG等文件的编码格式
  • 图片的解码:把JPG、PNG等文件中的数据解析成标准的图像数据
  • 音频、视频的编解码

加密解密 Encryption&Decryption

对称加密

  • 原理:使用密钥和加密算法对数据进行转换,得到的无意义数据即为密文;使用密钥和解密算法对密文进行逆向转换,得到原数据。
  • 经典算法:AES、DES
    非对称加密
  • 原理:使用公钥对数据进行加密得到密文,使用私钥对密文进行解密得到原数据。
  • 延伸用途:数字签名
  • 公钥、私钥 可以互解 使用时公开公钥
  • 经典算法:RSA(加密&签名)、DSA(签名)

数字签名 Digital Signature

防止伪造

密码学密钥和登录密码

密钥(key)

  • 场景:用于加密和解密
  • 目的:保证数据被盗时不会被人读懂内容
  • 焦点:数据

登录密码(password)

  • 场景:用户进入网站或游戏前的身份验证
  • 目的:数据提供方或应用服务方对账户拥有者数据的保护,保证“你是你”的时候才提供权限
  • 焦点:身份

Base64

将二进制数据转换成由64个字符组成的字符串的编码算法

什么是二进制数据?

用途:

  • 让原数据具有字符串所具有的特性,如可以放在URL中传输、可以保存到文本文件、可以通过普通的聊天软件进行文本传输

  • 把原本人眼可以读懂的字符串变成读不懂的字符串,降低偷窥风险

变种:Base58 去掉 0 O I l + / 用于数字货币的地址

压缩与解压缩 Compression&Decompression

压缩:把数据换一种方式来存储,以减小存储空间

解压缩:把压缩后的数据还原成原先的形式,以便使用

常见的压缩算法:DEFLATE、JPEG、MP3

压缩属于编码吗?

序列化 Serialization

序列化:把数据对象(一般是内存中的,例如JVM中的对象)转换成字节序列的过程

反序列化:把字节序列重新装换成内存中的对象

目的:让内存中的对象可以被存储和传输

序列化是编码吗?严格意义上不是,但是也不可否认。

哈希 Hash

Hash:把任意数据转换成指定大小范围(通常很小)的数据

作用:摘要、数字指纹

经典算法:MD5、SHA1、SHA256等

实际用途

  • 数据完整性验证
  • 快速查找:hashCode()和HashMap
  • 隐私保护

Hash是编码吗?

Hash是加密吗?据说MD5是加密吗?

字符集 Charset

含义:一个由整数向现实世界中的文字符号的Map

分支:

  • ASCII:128个字符,1字节
  • ISO-8859-1:对ASCII进行扩充,1字节
  • Unicode:13万个字符,多字节
    • UTF-8:Unicode的编码分支
    • UTF-16:Unicode的编码分支
  • GBK/GBK2312/GB18030:中国自研标准,多字节,字符集+编码

内容补充

  • 相关词:MD5、SHA1、RSA、DSA、AES、BASE64、encoded URL、Unicode、URF-8、GBK、ISO-8859-1…

Next

登录和第三方授权