加密
加密序列化
一个漏洞
标准情况下,私有目录的文件权限最后三位应为空(类似“rw-rw—-”),即除应用本身外任何人无法读写;目录则允许多一个执行位(类似“rwxrwx—r/w/rw”)。
漏洞模拟:
1、编写漏洞App 存储sp 为 MODE_WORLD_READABLE(应该使用MODE_PRIVATE)
2、编写黑客 App 获取 漏洞 App的数据内容。
1 |
|
对称加密
1 |
|
替换式加密
按规则使⽤不同的⽂字来替换掉原先的⽂字来进⾏加密
码表:
原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA
原始书信:I love you
加密书信:J mpwf zpv
解读后:I love you
加密算法:替换⽂字
密钥:替换的码表
现代密码学
可以加密任何⼆进制数据
⾮对称加密的出现使得密码学有了更⼴泛的⽤途:数字签名
对称加密
加密和解密是用的同一把钥匙
把数据改得别人看不懂,即为加密;按照原路倒退着把数据改回来,即为解密。
经典算法
DES(56 位密钥,密钥太短⽽逐渐被弃⽤)、AES(128 位、192 位、256 位密钥,现在最流⾏)
对称加密作⽤
加密通信,防⽌信息在不安全⽹络上被截获后,信息被⼈读取或篡改。
反破解
⼀种优秀的对称加密算法的标准是,让破解者找不到⽐穷举法(暴⼒破解法)更有效的破解⼿段,并且穷举法的破解时间⾜够⻓(例如数千年)。
对称加密的缺点
密钥泄露:不能在不安全⽹络上传输密钥,⼀旦密钥泄露则加密通信失败。
非对称加密
原理:使⽤公钥对数据进⾏加密得到密⽂;使⽤私钥对数据进⾏解密得到原数据
私有密钥:一方保管
公有密钥:双方公有
发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密
由于私钥和公钥互相可解,因此⾮对称加密还可以应⽤于数字签名技术。
通常会对原数据 hash 以后对 hash 签名,然后附加在原数据的后⾯作为签名。这是为了让数据更⼩,别人公钥解密即可验证加密者的身份
经典算法:RSA(可⽤于加密和签名)、DSA(仅⽤于签名,但速度更快)
RSA加密简单过程
- 服务端生成配对的公钥和私钥
- 私钥保存在服务端,公钥发送给客户端
- 客户端使用公钥加密明文传输给服务端
- 服务端使用私钥解密密文得到明文
⾮对称加密的优缺点
优点:可以在不安全⽹络上传输密钥
缺点:计算复杂,因此性能相⽐对称加密差很多
Md5
1+6=7,但是给你个7你能知道这是几跟几加得的吗?如果有人坚持认为 MD5算法是可逆的,请不妨设想一下将 MD5算法应用到文件压缩方面,那岂不是又出现了一种超级压缩技术了。。好几个 G 大小的文件都能压缩成一串 MD5,反正”可以求逆”也就是解压缩 (如果应用于压缩技术,算法就是公开的了,也不用费劲去破解了)。可惜这个显然是不可能的,哈哈哈
Base64
将⼆进制数据转换成由 64 个字符组成的字符串的编码算法
什么是⼆进制数据?
⼴义:所有计算机数据都是⼆进制数据
狭义:⾮⽂本数据即⼆进制数据
算法
将原数据每 6 位对应成 Base 64 索引表中的⼀个字符编排成⼀个字符串(每个字符8 位,3/4)。算法是公开的
Base64 的⽤途
- 将⼆进制数据扩充了储存和传输途径(例如可以把数据保存到⽂本⽂件、可以通过聊天对话框或短信形式发送⼆进制数据、可以在 URL 中加⼊简单的⼆进制数据)
- 普通的字符串在经过 Base64 编码后的结果会变得⾁眼不可读,因此可以适⽤于⼀定条件下的防偷窥(较少⽤)
Base64 的缺点
因为⾃身的原理(6 位变 8 位),因此每次 Base64 编码之后,数据都会增⼤约1/3,所以会影响存储和传输性能。
Base64 加密图⽚传输更安全和⾼效???
不。⾸先,Base64 并不是加密;另外,Base64 会导致数据增⼤ 1/3,降低⽹络性能,增⼤⽤户流量开销,是画蛇添⾜的⼿段。(最好不要拿来 diss 你们公司的后端哟,友善)
Base64 对图⽚进⾏编码的⽤于在于,有时需要使⽤⽂本形式来传输图⽚。除此之外,完全没必要使⽤ Base64 对图⽚进⾏额外处理。
URL 使⽤的百分号编码
在 URL 的字符串中,对⼀些不⽤于特殊⽤途的保留字符,使⽤百分号 “%” 为前缀进⾏单独编码,以避免出现解析错误。
例如,要在 http://hencoder.com/users 后⾯添加查询字符串,查询 name 为「隐秘&伟⼤」的⽤户,如果直接写成 http://hencoder.com/user/?name=隐秘&伟⼤
,”&” 符号就会被解析为分隔符号,因此需要对它进⾏转码,转码后的 URL 为 http://hencoder.com/user/?name=隐秘%26伟⼤ 。
这种编码仅⽤于 URL,⽬的是避免解析错误的出现。
压缩与解压缩
含义
压缩:将数据使⽤更具有存储优势的编码算法进⾏编码。
解压缩:将压缩数据解码还原成原来的形式,以⽅便使⽤。
⽬的
减⼩数据占⽤的存储空间。
压缩是编码吗?
是。所谓编码,即把数据从⼀种形式转换为另⼀种形式。压缩过程属于编码过程,解压缩过程属于解码过程。
常⻅压缩算法
DEFLATE、JPEG、MP3 等。
图⽚与⾳频、视频编解码
将图像、⾳频、视频数据通过编码来转换成存档形式(编码),以及从存档形式转换回来(解码)。
⽬的:存储和压缩媒体数据(⼤多数媒体编码算法会压缩数据,但不是全部)。
Hash
定义
把任意数据转换成指定⼤⼩范围(通常很⼩,例如 256 字节以内)的数据。
作⽤
相当于从数据中提出摘要信息,因此最主要⽤途是数字指纹。
Hash 是把任意数据转变成一小段数据,以便使用这一小段数据作为原数据的数字指纹,降低甄别成本。
Hash 的实际⽤途
唯⼀性验证
例如 Java 中的 hashCode() ⽅法。
怎么重写 hashCode ⽅法?
把 equals() ⽅法中的每个⽤于判断相等的变量都放进 hashCode() 中,⼀起⽣成⼀个尽量不会碰撞的整数即可
为什么每次重写 equals() ⽅法都需要?因为你要把新的判断条件放进hashCode() 啊。
数据完整性验证
从⽹络上下载⽂件后,通过⽐对⽂件的 Hash 值(例如 MD5、SHA1),可以确认下载的⽂件是否有损坏。如果下载的⽂件 Hash 值和⽂件提供⽅给出的 Hash 值⼀致,则证明下载的⽂件是完好⽆损的。
快速查找
HashMap
隐私保护
当重要数据必须暴露的时候,有事可以选择暴露它的 Hash 值(例如 MD5),以保障原数据的安全。例如⽹站登录时,可以只保存⽤户密码的 Hash 值,在每次登录验证时只需要将输⼊的密码的 Hash 值和数据库中保存的 Hash 值作⽐对就好,⽹站⽆需知道⽤户的密码。这样,当⽹站数据失窃时,⽤户不会因为⾃⼰的密码被盗导致其他⽹站的安全也受到威胁。(加盐)
注意:这不属于加密。
Hash 是编码吗?
不是。 Hash 是单向过程,往往是不可逆的,⽆法进⾏逆向恢复操作,因此 Hash 不属于编码。
Hash 是加密吗?
不是。Hash 是单向过程,⽆法进⾏逆向回复操作,因此 Hash 不属于加密。(记住,MD5 不是加密!)1+6=7,7=?+?,推导不出来