编码、加密、hash、序列化、字符集
古代密码学
- 移位式加密:密码棒
现代密码学
对称密码学
原理 使用密钥和加密算法对数据进行转换,使用密钥和解密算法对密文进行逆向转换,得到原数据
经典算法:DES,AES
非对称加密
使用公钥对数据加密得到密文,使用私钥对密文解密得到元数据
延伸用途:数字签名
公钥能不能解私钥?
可以互解
签名与验证
经典算法:RSA(签名/加密),DSA(特殊优化只用来签名)
缺点:性能不行,因为需要设计算法实现公钥秘钥解出来的数据一样
密码学密钥和登录密码
密钥(key)钥匙
- 场景用于加密和解密
- 目的:保护数据被盗时不会被人读懂内容
- 焦点:数据
登录密码(password)通行口令
- 场景:用户进入网站和游戏前的身份验证
- 目的:数据提供方或服务方对账户拥有者数据的保护
- 焦点:身份
Base64
将二进制数据转换为由64个字符组成的字符串的编码算法
Base64加密传输图片,可以更安全和高效么,真的么?
变种base58
URL encoding
将url中的保留字符使用百分号 “%” 进行编码
目的:消除歧义,避免解析错误
Http://www.baidu.com/user?name=自由&飞翔
http://www.baidu.com/user?name=自由%26飞翔
压缩和解压缩
压缩:把数据换一种方式来存储,以减少存储空间
解压缩:把压缩后的数据还原成原先的形式
常见压缩算法:DEFLATE、JPEG、MP3
压缩属于编码么?
编码到底是什么意思
压缩属于么
媒体数据的压缩编码
- 什么是图片 音频、视频的编解码?
- 图片的编码:把图像数据写成JPG、PNG等文件的编码格式
- 图片的解码:把JPG、PNG等文件中的数据解析成标准的图像数据
- 音频、视频的编解码
序列化
把数据对象(一般是内存中的,例如jvm中的对象)转换为字节序列的过程
反序列化:把字节序列重新转换为内存中的对象
目的:让内存中的对象可以被存储和传输
序列化是编码么?
Hash
把任意数据转换为制定大小范围(通常很小)的数据
作用:摘要,数字指纹
经典算法:MD5、SHA1、SHA256等
实际用途:
- 数据完整性验证
- 快速查找:hashCode()可以快速验证两个数据大致是否不同,但不够精准。HashMap
- 隐私保护 明文密码hash 彩虹表 带盐hash
Hash是编码么?
Hash是加密么
字符集
含义:一个由整数向现实世界中的文字符号的map
分支:
- ASCII:128个字符,1字节
- ISO-8859-1:对ASCII进行扩充,1字节
- Unicode: 13w个字符,多字节
- UTF-8:Unicode的编码分支
- UTF-16:Unicode的编码分支
- GBK /GB2312/GB1830