- 发送方
就是持有原数据的一方,他们会对原数据加密变成密文,然后发送该密文
- 接收方
接受传过来的数据的一方,他们会对密文解密,得到可读的原数据
- 盗窃方
恶意的嗨客会在网络上截取这些传输的密文,他们可能会通过暴力枚举的手段进行解密。网络安全、加密解密就是为了防止这些嗨客得到密文之后可以轻易的破解。
从理论来说,嗨客是不可能拿不到我们的密文的,因为网络传输时数据要经过很多个节点,我们是不能保证每个节点都是100000%安全的,也就是说,可能存在必经的节点是一个嗨客的节点,那么嗨客就能拿到这个密文。
- 密钥
密码钥匙,用来加密和解密的工具,他可以是一个算法,可以是一个映射表,总之通过它,原数据能变成密文,密文能变成原数据
- 加密算法
和密钥配合使用,可以认为 (明文 + 密钥) + 加密算法 ----> 密文
一般来说,加密算法是公开的,但是密钥都是保密的。
因为都是用同样加密算法加密和解密,所以解密的时候一定会产生数据溢出,
比如一个 RIKKA 通过加密算法 变成了 aohfohioqyrfopq… (明文通过算返后边的很长)
然后解密的时候又用同样的算法 变成了 aSIHjfophagepoa…(更长了,数据都溢出了)
再通过密钥就变成了 RIKKA。 所以数据溢出是很正常的。
这个图就很直观,很明了的表现出了对称加密。它有如下的特点:
-
发送发通过加密算法配合密钥对原数据加密得到密文,接收方通过加密算法和相同的密钥来解密得到明文。
-
加密算法和解密算法应该是互逆的
-
双发从一开始就持有了相同的密钥
这么说,从一开始,发送/接收双方就已经有同样的密钥了。
加密算法的原理:
发送方将明文(原始数据)和 加密密钥 一起经过特殊加密算法处理后,使其变成复杂无意义的 加密密文
发送出去。
收信方收到密文后,使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
可以对二进制数据(比如图片、视频)
经典算法:
DES(密钥短被弃用了)
AES (密钥很长 很顶) 速度快,效率高
IDEA
3DES(三重DES,听起来就很慢和重 = =,但是应该更难破解了)
至于具体的算法处理网上有许多文章。
原理:A使用公钥 和 加密算法 对数据加密得到密文发送给B,B使用私钥 和 相同的加密算法 对数据加密得到明文。
那这里有一个问题了:这样看来 私钥 能解 公钥 加密的数据 ,那这样,非对称加密和对称加密不是没什么不同吗????
这个问题的答案就是 非对称加密和对称加密的本质的区分:
答案如下:
-
A 有自己的公钥和私钥,假设叫 A公钥 和 A私钥, 它们互逆,能相互解开 对方加密的数据。
-
B 也有自己的公钥和私钥,叫 B公钥 和 B私钥,同样也是互逆 , B公钥能解开B私钥加密后的数据,反过来也是
-
对称加密中 公钥和私钥虽然互逆,但是A B两端也只用 这一对 唯一的密钥。
-
非对称加密中,A B都有了属于自己的 一对公钥密钥
-
A使用了B(对方)的公钥对数据进行了加密, 这也是为什么 B能够使用自己的私钥对密文进行解密
这就是非对称加密的本质。
那么实际情况时,A是怎么知道B的公钥呢?
答案是:在双方沟通开始前,双方各自就给对方发公钥,然后就能得到对方的公钥了。
就是嗨客拿到了密文 还有 公钥,他也不能解出来,因为密文是要用私钥去解的。
所以公钥为什么叫公钥,就是人人都可以获取的。
公钥也可以解开由私钥加密的密文。但是他们不能对换的。
数字签名就是利用 公钥也能解私钥的特点 来做的
数字签名的原理是:
**拿自己的私钥去对原数据进行加密,别人如果能通过我的公钥对数据还原,这就说明这份数据的确是我自己造的。这就是签名。
别人因为没有自己的私钥,所以伪造不出同样的签名数据。**
有了数字签名与验证,那么在平时的加密过程中:A可以向B发送一个原数据+一个数字签名,B收到之后会看到了原数据。那么他会验证是不是A写的,如果他拿A的公钥去解开了数字签名,那么就说明的确是A这个端发的 原数据,而不是别人 伪造了一份原数据。
↑ 这个做法在后面的HTTPS的TLS机制中有用到,通过验证数字签名,来判断对方是不是 我想要去信任的一端。
当然了,上面的例子中也可以把原数据加密一下,那这样带的就是 密文+签名数据了。
前面说过,嗨客是可以在AB数据传输中的路上 获取密文的,如果他截取了密文,然后又拿到了B的公钥,那么,他可以伪造一份原数据:“你给我转100到xxx账户”,然后拿B的公钥去加密,给B,B收到后因为可以用自己的私钥给解开,所以他会觉得这份数据就是A发的,然后他就转钱了。
这绝对是很不安全的。
通过数字签名的学习我们可以做到下面几步来让数据传输更加安全:
-
A 使用B公钥对原数据加密得到密文, 用A私钥对自己信息加密得到签名。
-
A发送 密文+签名 给B。
-
B通过 B的私钥来解密文, 再用A的公钥来解签名
-
验证都Ok,好,保证这份数据是A传给B的。因为嗨客没有A的私钥,所以嗨客不能构造A的签名。
Android开发除了flutter还有什么是必须掌握的吗?
相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了
除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;
点击文档前往获取面试资料与视频教程;【阿里P7级别Android架构师技术脑图+全套视频】
/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**
[外链图片转存中…(img-239T83tO-1643777545853)]