【Android】编码与加密
加密
密码学
起源:古代战争 - 古典密码学
移位式加密:密码棒
加密算法:缠绕木棒后书写
密钥:木棒的尺寸规格
密码棒.png
替换式加密:
加密算法:替换文字
秘钥:码表
原文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
码表:BCDEFGHIJKLMNOPQRSTUVWXYZA
原文:i love you
加密:j mpwf zpv
解密:i love you
现代密码学
不止可以用于文字内容,还可以用于各种二进制数据
对称加密
原理:使用秘钥和加密算法对数据进行转换,得到的无意义数据即为密文;使用秘钥
和解密算法对密文进行逆向转换,得到原数据。
经典算法:DES(秘钥长度太短,容易被破解), AES
对称加密.png
非对称加密
原理:使用公钥对数据进行加密得到密文;使用私钥对数据进行解密得到原数据。
双方各持有自己的私钥和对方的公钥,用公钥加密发送出去的消息,用私钥解密对方发过来的消息
优点:可以在不安全网络上传播自己的公钥。
缺点:计算太复杂,性能比对称加密差
非对称加密1.png
非对称加密2.png
公钥能不能解私钥?
可以互相解的,但是因为公钥可以被计算出来,所以不可以将私钥当公钥公开(比特币,通过椭圆曲线计算)
数字签名
经典算法:RSA(既可以加密,又可以签名),DSA(只可以签名)
数字签名.png
但是不确定验证后的原数据是否是真的原数据,所以下面是增强版数字签名,将原文携带,方便校验。
增强版数字签名.png
下面是加密+签名的模型(残缺版)
加密+签名.png
下面是完整版模型
加密+签名(完整版).png
密码学秘钥和登录密码
秘钥(key):相当于钥匙,丢了以后谁也没有办法。
场景:用于加密和解密
目的:保证数据被盗时不会被人读懂内容
焦点:数据
登录密码(pasword):又被称为通行口令。
场景:用户进入网站或游戏前的身份验证
目的:数据提供方或应用服务方对账户拥有者数据的保护,保证【你是你】的时候才提供权限
焦点:身份
Base64
从A格式转换成B格式,并且能转换回来。
将二进制数据转换成由64个字符组成的字符串的编码算法
什么是二进制数据?
非文本数据,因为文本数据比较特殊,而二进制数据则是为了区分文本数据
作用:1.将二进制数据转换为字符串
2.防偷窥(将本来能读懂的字符串变成读不懂的字符串)
转换过程.png
码表.png
Base64加密传输图片,更安全更高效吗?
并没有更安全,因为根据码表就可以解密。
并没有更高效,因为字节码变多了。
变种Base58
比特币存储地址,去除相似的字符
URL encoding
浏览器编码,将URL中的保留字符使用百分号“%”进行编码,目的是为了消除歧义,避免解析错误
压缩与解压缩
压缩:把数据换一种方式来存储,以减小存储空间
解压缩:把压缩后的数据还原成原先的形式,以便使用
常见压缩算法:DEFLATE(ZIP)、JPEG、MP3
例:
原数据:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
压缩后:
a:41;b:41;
压缩属于编码吗?
压缩后又可以解压缩回来,所以属于编码
媒体数据的编码
什么是图片、音频、视频的编解码?
图片的编码:把图像数据写成JPG、PNG等文件的编码格式。
图片的解码:把JPG、PNG等文件中的数据解析成标准的图像数据。
音视频的编解码
有损压缩不可逆,所以不属于编码