Android 深入Http(2)加密与编码

可以对二进制数据(比如图片、视频)

经典算法:

DES(密钥短被弃用了)

AES (密钥很长 很顶) 速度快,效率高

IDEA

3DES(三重DES,听起来就很慢和重 = =,但是应该更难破解了)

至于具体的算法处理网上有许多文章。

非对称加密


原理:A使用公钥加密算法 对数据加密得到密文发送给B,B使用私钥相同的加密算法 对数据加密得到明文。

那这里有一个问题了:这样看来 私钥 能解 公钥 加密的数据 ,那这样,非对称加密和对称加密不是没什么不同吗????

这个问题的答案就是 非对称加密和对称加密的本质的区分:

答案如下:

  1. A 有自己的公钥和私钥,假设叫 A公钥 和 A私钥, 它们互逆,能相互解开 对方加密的数据。

  2. B 也有自己的公钥和私钥,叫 B公钥 和 B私钥,同样也是互逆 , B公钥能解开B私钥加密后的数据,反过来也是

  3. 对称加密中 公钥和私钥虽然互逆,但是A B两端也只用 这一对 唯一的密钥。

  4. 非对称加密中,A B都有了属于自己的 一对公钥密钥

  5. A使用了B(对方)的公钥对数据进行了加密, 这也是为什么 B能够使用自己的私钥对密文进行解密

这就是非对称加密的本质。

那么实际情况时,A是怎么知道B的公钥呢?

答案是:在双方沟通开始前,双方各自就给对方发公钥,然后就能得到对方的公钥了。

就是嗨客拿到了密文 还有 公钥,他也不能解出来,因为密文是要用私钥去解的。

所以公钥为什么叫公钥,就是人人都可以获取的。

公钥也可以解开由私钥加密的密文。但是他们不能对换的。

非对称加密用途:数字签名


数字签名就是利用 公钥也能解私钥的特点 来做的

数字签名的原理是:

**拿自己的私钥去对原数据进行加密,别人如果能通过我的公钥对数据还原,这就说明这份数据的确是我自己造的。这就是签名。

别人因为没有自己的私钥,所以伪造不出同样的签名数据。**

有了数字签名与验证,那么在平时的加密过程中:A可以向B发送一个原数据+一个数字签名,B收到之后会看到了原数据。那么他会验证是不是A写的,如果他拿A的公钥去解开了数字签名,那么就说明的确是A这个端发的 原数据,而不是别人 伪造了一份原数据。

↑ 这个做法在后面的HTTPS的TLS机制中有用到,通过验证数字签名,来判断对方是不是 我想要去信任的一端。

当然了,上面的例子中也可以把原数据加密一下,那这样带的就是 密文+签名数据了。

数字签名可以使非对称加密更加安全


前面说过,嗨客是可以在AB数据传输中的路上 获取密文的,如果他截取了密文,然后又拿到了B的公钥,那么,他可以伪造一份原数据:“你给我转100到xxx账户”,然后拿B的公钥去加密,给B,B收到后因为可以用自己的私钥给解开,所以他会觉得这份数据就是A发的,然后他就转钱了。

这绝对是很不安全的。

通过数字签名的学习我们可以做到下面几步来让数据传输更加安全:

  1. A 使用B公钥对原数据加密得到密文, 用A私钥对自己信息加密得到签名。

  2. A发送 密文+签名 给B。

  3. B通过 B的私钥来解密文, 再用A的公钥来解签名

  4. 验证都Ok,好,保证这份数据是A传给B的。因为嗨客没有A的私钥,所以嗨客不能构造A的签名。

经典算法:

RSA:用来签名、原文加密 都行。

DSA:专门设计用来签名。(签名更加快)

Base64


原理:将二进制数据(非文本数据)转换成由64个字符组成的字符串的编码算法。

64个字符是0-9 a-z A-Z + / 有个专门的码表(映射表)

比如

比如 M的ASCII是77,对应的二进制是 01001101。

然后自己规定,每6位截取一下,那么就能 切成 010011 + 01,其中 前半部分换成10进制是19,在码表中对应T,后半部分01换成十进制是1,在码表中对应B。

那么M被Base64转换之后就变成了 TB。

其中最多只能规定6位截取一下,因为码表只有64个字符,如果超出6位,那么多出来的码表就没有了。

当然了,还有Base58。

所以Base64的本质将二进制数据转换成字符串。(比如 图片、视频)

所以它的用途是:可以放在URL中传输、可以保存到文本文件、可以进行文本传输。

但是Base64用来加密,肯定是不安全的,Base64码表任何人都知道,直接转过来就行了。

而且Base64完全不高效,都把数据变得更长了。相反它很低效,能不用就不用。

URL encoding是Base64的变种


URL可能识别不了中文,所以它会将中文转换成Base64,使用%来编码

压缩与解压缩


压缩的概念是 将数据换一种方式来存储,以减小存储空间

解压缩则是 将压缩后的数据还原成 原来的数据

原则上压缩不算编码。

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

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

总结

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后如何才能让我们在面试中对答如流呢?

答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?有没有免费资料可以借鉴?为此我整理了一份Android学习资料路线:

这里是一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套BAT大厂面试资料专题包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家。需要的小伙伴们可以点击我的GitHub获取免费领取方式

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以去我的主页加一下技术群。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

最后,祝愿即将跳槽和已经开始求职的大家都能找到一份好的工作!

片转存中…(img-HtqddmFk-1710503443697)]

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以去我的主页加一下技术群。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

最后,祝愿即将跳槽和已经开始求职的大家都能找到一份好的工作!

这些只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。喜欢的话麻烦点击一个喜欢再关注一下~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/747445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能服务系列【八】C10M时代,网络IO库需要重建

在目前网络上能搜索到的,关于网络IO模型的文章,基本都是关于多路复用的iocp/epoll的,这些技术是为了解决C10K问题而提出的解决方案。现代网卡已经普遍支持10Gb,100Gb也不少见,这些解决方案已经无法提升性能的需求。 我…

VGG论文学习笔记

题目:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文下载地址:VGG论文 摘要 目的:研究深度对精度的影响 方法:使用3*3滤波器不断增加深度,16和19效果显著 成绩:在ImageNet 20…

编译nodejs源码(包括升级gcc)

记录背景 因为之前过rs的时候找大佬要的 魔改的 node, 但是只有 win版本,当时大佬把源码给了我一份,工作需要在 linux 上运行, 特此记录下编译过程 环境准备 centos7.9 1. gcc 升级, 默认是低版本1. yum -y install centos-re…

docker内部无法使用ping等网络工具解决方案

通常docker内部没有网络,所以我们先离线安装需要的依赖包,然后再使用sh脚本容器内部访问宿主机同网络端其他服务器ip,实现监测远程ip telnet包依赖于netbase包,但是netbase包没有安装。你需要先安装netbase包,然后再尝试安装teln…

MySQL主键采用什么结构?为什么要自增?为什么用int?

MySQL主键通常采用的是自增的整数类型结构。 在MySQL中,主键是用来唯一标识表中每一行记录的一个列或多个列的组合,其值能保证每条记录的唯一性。主键的选择对于数据库的性能和数据完整性都至关重要。通常情况下,MySQL主键采用的结构是自增的…

搭建知识管理系统并不复杂,这篇教程来帮你

许多人都有这样的体验:我们抓住的想法和知识总在不经意间溜走,我们想要的信息总是一时无法找到。因此,搭建一个能够系统化、分类和索引存储这些知识的“知识管理系统”是必要的。听上去很专业,其实并不复杂,让我们一步…

mysql: 如何开启慢查询日志?

1 确认慢查询日志功能已开启 执行以下sql语句,查看慢查询功能是否开启: show VARIABLES like slow_query_log;如果为ON,表示打开;如果为OFF,表示没有打开,需要开启慢查询功能。 执行以下sql语句&#xff0…

修改 MySQL update_time 默认值的坑

由于按规范需要对 update_time 字段需要对它做默认值的设置 现在有一个原始的表是这样的 CREATE TABLE test_up (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,update_time datetime default null COMMENT 操作时间,PRIMARY KEY (id) ) ENGINEInnoDB DEF…

内存中的数据存储(未完)

整数在内存中的存储 在前面说过整数的2进制表示方法有三种,即 原码、反码和补码。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位…

MapStruct代替BeanUtils.copyProperties ()使用

1.为什么MapStruct代替BeanUtils.copyProperties () 第一:因为BeanUtils 采用反射的机制动态去进行拷贝映射,特别是Apache的BeanUtils的性能很差,而且并不支持所有数据类型的拷贝,虽然使用较为方便,但是强烈不建议使用…

【C++】每日一题 101 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} };bool isSymmetric(TreeNode* root) {if (root nullptr) {return true;}return isMirror(r…

基于openpose的引体向上的识别计数统计项目(5)CPoseClassify类设计与实现

和CPoseExtract一样, CPoseClassify设计为一个纯虚类,规定了基本的调用接口函数,便于后续扩展使用。该类主要用于判断一帧骨骼关键点数据属于引体向上动作中的状态类型。 // https://www.wikihow.com/Do-a-Chin-Up enum PullupCls {None = -1, // 未知占位Drape = 0, // …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:NavRouter)

导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 必须包含两个子组件,其中第二个子组…

【趣味学算法】08 凯撒密码

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正 《罗马帝王传》中描述…

分析型数据库的主要使用场景有哪些?

如今数据已经成为了企业和组织的核心资产。如何有效地管理和利用这些数据,成为了决定竞争力的关键。分析型数据库作为数据处理领域的重要工具,为各行各业提供了强大的数据分析和洞察能力。基于分析型数据库(Apache Doris )构建的现…

当模型足够大时,Bias项不会有什么特别的作用

问题来源: 阅读OLMo论文时,发现有如下一段话: 加上前面研究llama和mistral结构时好奇为什么都没有偏置项了 偏置项的作用: 回到第一性原理来分析,为什么要有偏置项的存在呢? 在神经网络中,…

跨境热点!TikTok直播网络要求是什么?

TikTok直播作为一种互动性强、实时性要求高的社交媒体形式,对网络环境有着一系列特定的需求。了解并满足这些需求,对于确保用户体验、提高直播质量至关重要。本文将深入探讨TikTok直播对网络环境的要求以及如何优化网络设置以满足这些要求。 TikTok直播的…

mac启动elasticsearch

1.首先下载软件,然后双击解压,我用的是7.17.3的版本 2.然后执行如下命令 Last login: Thu Mar 14 23:14:44 on ttys001 diannao1xiejiandeMacBook-Air ~ % cd /Users/xiejian/local/software/elasticsearch/elasticsearch-7.17.3 diannao1xiejiandeMac…

[剪藏] - 2024QS世界大学前200名排名榜(101-200)

2024QS世界大学排名(101-200) 排名 校名/国家 综合得分 100 诺丁汉大学 60.4 United Kingdom 102 威斯康星大学麦迪逊分校 60 United States 103 智利天主教大学 59.9 Chile 104 谢菲尔德大学 59.7 United Kingdom 105 乌普萨…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Menu)

以垂直列表形式显示的菜单。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 Menu组件需和bindMenu或bindContextMenu方法配合使用,不支持作为普通组件单独使用。 子组件 包含MenuIt…