编码解码 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…