安卓 各类加密编码详解

本文介绍了Base64编码的基本概念、用途、优点和缺点,以及与之相关的技术如压缩、解压缩、序列化、哈希函数(如MD5)和字符集。同时提到了在Android开发中学习资源的重要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

这个就很好理解了

编码示例:Base64 的末尾补⾜

在这里插入图片描述

Base64 的⽤途

  1. 将⼆进制数据扩充了储存和传输途径(例如可以把数据保存到⽂本⽂件、可以通过聊天对话框或

短信形式发送⼆进制数据、可以在 URL 中加⼊简单的⼆进制数据)

  1. 普通的字符串在经过 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,⽬的是避免解析错误的出现

压缩与解压缩

含义

压缩:将数据使⽤更具有存储优势的编码算法进⾏编码。

解压缩:将压缩数据解码还原成原来的形式,以⽅便使⽤。

⽬的

减⼩数据占⽤的存储空间。

**粗暴算法举例

将下⾯⽂本内容压缩:**

原始数据

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

使用某种压缩算法

compress🅰️1062;b:105

压缩是编码吗?

是。所谓编码,即把数据从⼀种形式转换为另⼀种形式。压缩过程属于编码过程,解压缩过程属于解

码过程。

常⻅压缩算法

DEFLATE、JPEG、MP3 等

图⽚与⾳频、视频编解码


将图像、⾳频、视频数据通过编码来转换成存档形式(编码),以及从存档形式转换回来(解码)。

⽬的

存储和压缩媒体数据(⼤多数媒体编码算法会压缩数据,但不是全部)。

图⽚压缩粗暴算法举例

⼀张纯⽩(⽩⾊的 16 进制数值为 0xffffff)的 64x64 不透明像素图⽚,原数据格式⼤致为

width:64;height:64;ffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff…f

fffff

使用某种算法后:

width:64;height:64;ffffff:[0,0]-[63,63]

⾳频与视频的编码与上⾯的图⽚编码同理

序列化


数据对象(⼀般是内存中的,例如 JVM 中的对象)转换成字节序列的过程。对象在程序内存⾥的存

放形式是散乱的(存放在不同的内存区域、并且由引⽤进⾏连接),通过序列化可以把内存中的对象

转换成⼀个字节序列,从⽽使⽤ byte[] 等形式进⾏本地存储或⽹络传输,在需要的时候重新组装(反

序列化)来使⽤

⽬的

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

**注意 序列化不是编码

编码是把**数据由⼀种数据格式转换成另⼀种数据格式;⽽序列化是把数据由内存中的对象(⽽不是某

种具体的格式)转换成字节序列。

HASH


编码是把数据由⼀种数据格式转换成另⼀种数据格式;⽽序列化是把数据由内存中的对象(⽽不是某

种具体的格式)转换成字节序列。

Hash 的实际⽤途:唯⼀性验证

例如 Java 中的 hashCode() ⽅法。

怎么重写 hashCode ⽅法?

把 equals() ⽅法中的每个⽤于判断相等的变量都放进 hashCode() 中,⼀起⽣成⼀个尽量不会碰撞的

Hash 的实际⽤途:数据完整性验证

从⽹络上下载⽂件后,通过⽐对⽂件的 Hash 值(例如 MD5、SHA1),可以确认下载的⽂件是否有

损坏。如果下载的⽂件 Hash 值和⽂件提供⽅给出的 Hash 值⼀致,则证明下载的⽂件是完好⽆损

的。

Hash 的实际⽤途:快速查找

HashMap

Hash 的实际⽤途:隐私保护

当重要数据必须暴露的时候,有事可以选择暴露它的 Hash 值(例如 MD5),以保障原数据的安全。

例如⽹站登录时,可以只保存⽤户密码的 Hash 值,在每次登录验证时只需要将输⼊的密码的 Hash

值和数据库中保存的 Hash 值作⽐对就好,⽹站⽆需知道⽤户的密码。这样,当⽹站数据失窃时,⽤

户不会因为⾃⼰的密码被盗导致其他⽹站的安全也受到威胁。

Hash 是编码吗?

不是。 Hash 是单向过程,往往是不可逆的,⽆法进⾏逆向恢复操作,因此 Hash 不属于编码。

Hash 是加密吗?

不是。Hash 是单向过程,⽆法进⾏逆向回复操作,因此 Hash 不属于加密。(记住,MD5 不是加密

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

字符集

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后的最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的

最后,互联网不存在所谓的寒冬,只是你没有努力罢了!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

3/H4lCoPEF.jpg" />

最后的最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的

[外链图片转存中…(img-SSzeJ7wI-1713587830032)]

最后,互联网不存在所谓的寒冬,只是你没有努力罢了!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值