juejin.cn Open in urlscan Pro
163.181.92.232  Public Scan

Submitted URL: http://juejin.cn/post/6995549209348816909
Effective URL: https://juejin.cn/post/6995549209348816909
Submission: On November 28 via manual from HK — Scanned from DE

Form analysis 1 forms found in the DOM

<form role="search" class="search-form isResourceVisible" data-v-c6ae699a=""><input type="search" maxlength="32" placeholder="探索稀土掘金" value="" class="search-input isResourceVisible" data-v-c6ae699a="">
  <div class="seach-icon-container" data-v-c6ae699a=""><img src="//lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/1e8ab9a22f0ddc36349f60b38900d0bd.svg" alt="搜索" class="search-icon" data-v-c6ae699a=""></div>
  <div class="typehead" style="display:none;" data-v-c6ae699a=""><!---->
    <div class="title" data-v-c6ae699a=""><span data-v-c6ae699a="">搜索历史</span> <span class="clear" data-v-c6ae699a=""> 清空 </span></div>
    <div class="list" data-v-c6ae699a=""></div>
  </div>
</form>

Text Content

   
 * 首页
   * 首页
   * 沸点
   * 课程
   * 直播
   * 活动
     商城
     APP 邀请有礼
     插件
   * 
    * * 搜索历史 清空
        
      * 创作者中心
        
         * 写文章
         * 发沸点
         * 写笔记
         * 写代码
         * 草稿箱
      
    * 会员
      掘金会员,新权益到账啦~! 字节内部课程,VIP免费学习
      
      
    * 登录


加密、摘要、签名、证书,一次说明白!

彭旭锐
VIP.3 渐入佳境
2021年08月12日 14:24 ·  阅读 5766
关注

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

> 点赞关注,不再迷路,你的支持对我意义重大!
> 
> 🔥 Hi,我是丑丑。本文 GitHub · Android-NoteBook 已收录,这里有 Android 进阶成长路线笔记 &
> 博客,欢迎跟着彭丑丑一起成长。(联系方式 & 入群方式在 GitHub)


前言

 * 数据安全传输,是一个非常宽泛的话题。HTTPS、文件签名、应用签名等场景背后,其实解决的就是如何安全地传输数据的问题;
 * 在这篇文章里,我将带你理解 数据安全传输的基本模型,以及加密、摘要、签名和数字证书的概念与作用。如果能帮上忙,请务必点赞加关注,这真的对我非常重要。

--------------------------------------------------------------------------------


目录



--------------------------------------------------------------------------------


1. 概述

1.1 CIA 三要素

在讨论今天的主题之前,有必要先搞清楚到底什么是安全?在计算机领域,所谓的 “安全” 其实是指 “信息安全”,它的基本含义可以概括为三个要素,简称 CIA
三要素:

 * 1、机密性(Confidentiality): 指确保数据在传输和存储过程中的私密性。主要的手段是加密、权限管理和敏感信息脱敏;

 * 2、完整性(Integrity): 指确保数据内容完成,没有被篡改。主要手段是数字签名;

 * 3、可用性(Avaliability): 指确保服务保持可用状态。例如能够承受 Dos 等网络攻击。

1.2 非安全信道的风险

数据需要通过信道进行传输,狭义上的信道是指报纸、有线网络、无线电波等通信媒介,而广义上说,信道可以理解为数据从分发到接收的整个过程。在非安全信道中,主要会面临以下三个安全风险:

 * 1、窃听风险: 现代计算机网络建立在 TCP/IP 协议族提供传输能力上,数据在传输线路上的每个环节都可能被窃听,从而导致敏感数据泄露;

 * 2、篡改风险:
   数据在传输过程中可能被篡改,例如中间人攻击。攻击者可以和通信双方分别建立独立的连接,使得通信双方误以为它们正在进行一个私密连接,但察觉不到数据被篡改;

 * 3、伪装风险: 攻击者可以伪装成合法的身份。

1.3 如何实现传输安全?

我们今天的主题 “加密 + 签名 +
证书”,本质上就是在非安全信道中实现数据安全传输的解决方案。要实现数据安全传输,其实就是要高效地解决非安全信道中的三个风险:

 * 1、加密 —— 防窃听 : 将明文转换为密文,只有期望的接收方有能力将密文解密为明文,即使密文被攻击者窃取也无法理解数据的内容;

 * 2、验证完整性 —— 防止篡改:
   对原始数据计算摘要,并将数据和摘要一起交付给通信对方。接收方收到后也对数据计算摘要,并比较是否和接受的摘要一致,借此判断接收的数据是否被篡改。不过,因为收到的摘要也可能被篡改,所以需要使用更安全的手段:数字签名;

 * 3、认证数据来源 —— 防止伪装: 数字签名能够验证数据完整性,同时也能认证数据来源,防止伪装。

--------------------------------------------------------------------------------


2. 加密 —— 防窃听

2.1 什么是加密?

加密(Encryption)是将明文(Plaintext)转换为密文(Ciphertext)的过程,只有期望的接收方有能力将密文解密为明文,即使密文被攻击者窃取也无法理解数据的内容。



在古典密码时期,数据保密性取决于算法的保密性,一旦加密算法被破解或泄露,就失去了数据的安全性。而进入现代密码时期,柯克霍夫原则成为加密系统的基本设计原则:数据的安全性基于密钥而不是算法的保密。

根据柯克霍夫原则,现代的保密通信模型是基于密钥的保密模型模型。在这个模型中,加密和解密使用相同密钥,就是 对称加密密码体制;反之,加密和解密使用是不同密钥,就是
非对称密码体制。

2.2 对称加密和非对称加密的区别?

 * 1、密钥管理: 对称加密算法中需要将密钥发送给通信对方,存在密钥泄漏风险;非对称加密公钥是公开的,私钥是保密的,防止了私钥外传;

 * 2、密钥功能:
   公钥加密的数据,只可使用私钥对其解密。反之,私钥加密的数据,只可使用公钥对其解密(注意:公钥加密的数据无法使用公钥解密,因为公钥是公开的,如果公钥可以解密的话,就失去了加密的安全性);

 * 3、计算性能: 非对称加密算法的计算效率低,因此实际中往往采用两种算法结合的复合算法:先使用非对称加密建立安全信道传输对称密钥,再使用该密钥进行对称加密;

 * 4、认证功能: 非对称加密算法中,私钥只有一方持有,具备认证性和抗抵赖性(第 3 节 数字签名算法 应用了此特性)。

考虑到性能的因素,在 HTTPS 协议中采用的是 “对称加密” 和 “非对称加密” 结合的 “混合加密” 方案:在建立通信时,采用非对称加密的方式来协商
“会话密钥”,在通信过程中基于该密钥进行对称加密通信。

2.3 数据加密标准 —— DES

1977 年,数据加密标准(Data Encryption Standard,
DES)成为美国联邦信息处理标准,并逐渐成为事实标准,很多主流的对称加密算法都是从 DES 算法发展过来的。

DES 算法的主要缺点是加密强度和计算性能较差

 * 1、密钥长度太短: DES 算法密钥长度只有 56 bit,理论最大加密长度为 256。随着计算机算力的提高,用穷举法可以在较短时间破解密钥;

 * 2、不能对抗差分和线性密码分析;

 * 3、计算性能较差: 增加 DES 密钥长度,加解密的计算开销呈指数增长。

2.4 高级加密标准 —— AES

高级加密标准(Advanced Encryption Standard, AES),又称 Rijndael
[rain-dahl]加密法,是目前最流行的对称加密算法之一。

相对于 DES 算法,AES 算法的主要优点如下:

 * 1、密钥长度更大: 密钥长度最小为 12 bit,最大为 256 bit。用穷举法难以破解;

 * 2、使用 WTS 设计策略,可对抗差分和线性密码分析;

 * 3、计算性能高: 计算和内存开销低,适用于受限设备。

2.5 RSA 算法

1977 年,麻省理工学院的三位教授 Rivest、Shamir 和 Adleman 共同提出了 RSA 加密算法,其中 RSA 分别是他们姓氏的首字母。RSA
是经典的非对称加密算法,同时也是经典的数字签名算法。

RSA 算法的安全性依赖于一个数学难题 ——
“大数因式分解”:两个大素数相乘非常容易,但对一个极大整数做因式分解的复杂度极高。如果存在某种快速因素分解的算法,那么 RSA 算法的可靠性将会大大折扣。RSA
算法存在一个系统性风险:“不支持前向加密”。在 RSA 算法中,服务端公钥是相对固定的,一但服务端私钥被破解,则之前所有发送过得加密数据都会被破解。

关于 RSA 算法的原理解析,可参考:浅析 RSA 算法。

2.6 DH 算法

DH 算法的安全性依赖于一个数学难题 —— “离散对数”:已知对数计算出真数非常简单,但已知真数求对数的复杂度极高。 如果存在某种求对数的算法,那么 DH
算法的可靠性将会大大折扣。

目前,DH 算法有多种实现,主要区别如下:

 * static DH 算法:一方的私钥是静态的(通常是服务器私钥固定),不具备前向安全性;

 * DHE 算法:双方的私钥都在密钥交换节点随机生成,具备前向安全性;

 * ECDHE 算法:利用 ECC 椭圆曲线特性,可以用更少的计算量计算公钥和私钥。

关于 DH 算法的原理解析,可参考:这 HTTPS,真滴牛逼!

2.7 安全系统中为什么要使用随机数?

在 RSA 算法生成密钥对的过程中,我们需要随机生成两个大素数。事实上,除了在 RSA 算法中,很多安全系统中都需要一个随机数,为什么呢?——
关键在于随机数不可预测性,可以提高破解和报文重放攻击难度。

2.8 计算机如何生成随机数?

随机数是计算机安全领域中非常重要的一个点,很多场景中都需要一个随机数来生成随机事件,比如密钥的生成、文件名、sessionId/orderId/token
等。现代的随机数生成模型依然采用的是 1946 年冯·诺依曼设计的随机数模型:

1、输入任意一个数作为 “种子”,通过随机数算法得到一个随机数; 2、将生成的随机数作为新的种子,代入下一轮计算; 3、重复 1、2
步骤,就可以生成多个具有统计意义的随机数。

然而,通过这种模型生成的随机数并不是绝对随机的。只要取样范围足够大,随机结果一定会陷入循环,因此这种模型生成的随机数只能称为
“伪随机数”,而随机结果陷入循环的周期称为 “随机周期”。

要得到真正意义的随机数,需要硬件层面支持。1999 年 Intel 在其 i810
芯片组上集成了世界上第一款真随机数生成器,它的方案是将电路的热噪声(分子的不规则运动)作为数据来源,缺点是效率太低,因此目前计算机中采用的随机数依旧是软件实现的伪随机数。虽然软件无法做到真随机,但可以提高生成器的随机性。比如采用更强壮的随机算法(Java#SecurityRandom)、采用更复杂的种子(系统时间、鼠标位置、网络速度、硬盘读写速度)、扩大随机数的取值范围、组合多个随机算法等。

--------------------------------------------------------------------------------


3. 数字签名 —— 验证完整性 & 认证数据来源

3.1 什么是数字签名?

数字签名(Digital Signature)也叫作数字指纹(Digital
Fingerprint),它是消息摘要算法和非对称加密算法的结合体,能够验证数据的完整性,并且认证数据的来源。

数据签名算法的模型分为两个主要阶段:

 * 1、签名: 先计算数据的 [摘要],再使用私钥对 [摘要] 进行加密生成 [签名],将 [数据 + 签名] 一并发送给接收方;
 * 2、验证: 先使用相同的摘要算法计算接收数据的 [摘要],再使用预先得到的公钥解密 [签名],对比 [解密的签名] 和 [计算的摘要]
   是否一致。若一致,则说明数据没有被篡改。



> 提示: 接收方如何安全地预先得到发送方的公钥,见 第 4 节。

3.2 为什么数字签名可以验证完整性?

验证完整性主要依赖于消息摘要算法的特性,摘要算法的原理是根据一定的运算规则提取原始数据中的信息,被提取的信息就是原始数据的消息摘要,也称为数据指纹。著名的摘要算法有
MD5 算法和 SHA 系列算法。

摘要算法具有以下特点:

 * 一致性: 相同数据多次计算的摘要是相同的,不同的数据(在不考虑碰撞时)的摘要是不同的;
 * 不可逆性: 只能正向提取原始数据的摘要,无法从摘要反推出原始数据;
 * 高效性: 摘要的生成过程高效快速;

摘要算法的模型分为两个主要步骤:

 * 生成摘要: 先计算数据的 [摘要],再将 [数据 + 摘要] 一并发送给接收方;
 * 验证摘要: 使用相同的摘要算法计算接收数据的 [摘要],对比 [收到的摘要] 与 [计算的摘要]是否一致。若一致,则说明数据是完整的。

需要注意的是,单纯依靠摘要算法不能严格地验证数据完整性。因为在非安全信道中,数据和摘要都存在篡改风险,攻击者在篡改数据时也可以篡改摘要。因此,摘要算法需要配合加密算法才能严格验证完整性。



3.3 为什么数字签名可以认证数据来源?

这是因为签名时引入了发送方的私有信息(私钥),只有 ”合法的发送方“
才能产生其他人无法伪造的一段数字签名(加密字符串),这个数字签名就证明了数据的真实来源。当接收方采用 ”合法途径“
获得发送方的公有信息是(公钥),并且成功验证数字签名,那么正说明数据来自 ”合法的接收方“。

另外,在签名时引入发送方私有信息,在验证时使用发送方公有信息,这正好符合 “非对称加密”
的特点。因此签名时引入的私有信息正是私钥,验证时使用的公有信息正式公钥。

3.4 摘要算法存在碰撞,是不是不安全?

摘要算法(散列算法)本质上是一种 压缩映射,因此一定存在不同原始数据映射到同一个散列值的情况,这就是发生了碰撞(散列冲突,Hash
Collision)。事实上,MD5、SHA-1
等散列算法已经陆续被找到快速散列碰撞的的方法,攻击者可以构造内存篡改但摘要一致的文件从而绕过检查。但不代表完全不安全,因为篡改为有价值的伪造内容还有困难??



3.5 为什么摘要中需要加盐?

为了提高安全性,在对原始数据生成摘要之前,我们往往会先向原始数据中加盐,再生成摘要。为什么要这么做呢?

这是为了避免 “彩虹表(Rainbow tables)”
攻击,提高简单数据的安全性。因为摘要算法有一致性的特点,相同数据多次计算的摘要是相同的。利用这个特性,攻击者可以预先生成一系列简单数据的摘要,并存储 “摘要 -
数据” 的映射,这个映射关系就是彩虹表。在获取到数据摘要后,如果发现摘要存在彩虹表中,就可以轻易地反推出原始数据。

用户在设置密码时,也要避免使用 123456
这种简单密码,因为容易被彩虹表攻击破解。为了提高安全性,在传输手机号、密码等敏感信息的过程中,往往会在原始密码中加盐。



3.6 可以先使用私钥对原数据签名,再对签名进行摘要吗?

不可以,主要有两个原因:

 * 1、可行性: 接收方需要通过摘要验证数据完整性,然而接收方无法对数据进行签名,因此无法验证数据摘要一致性;

 * 2、时间效率: 对原始数据进行签名(加密)时间太长,而摘要算法本身是压缩映射,可以缩短签名消耗的时间。

--------------------------------------------------------------------------------


4. 数字证书 —— 安全地发放公钥

在 第 3 节 中,我们提到接收方需要使用发送方的公钥来验证数据真实性。那么,接收方怎样才能安全地获得发送方公钥呢?这就需要数字证书来保证。

4.1 什么是数字证书?

数字签名和数字证书总是成对出现,二者不可分离。数字签名主要用来验证数据完整性和认证数据来源,而数字证书主要用来安全地发放公钥。
数字证书主要包含三个部分:用户的信息、用户的公钥和 CA 对该证书实体信息的签名。

数字证书的模型主要分为两个步骤:

 * 1、颁发证书:
   
   * 1.1 申请者将签名算法、公钥、有效时间等信息发送给 CA 机构;
   * 1.2 CA 机构验证申请者身份后,将申请者发送的信息打成一个实体,并计算摘要;
   * 1.3 CA 机构使用自己的私钥对摘要进行加密,生成证书签名(Certificate Signature);
   * 1.4 CA 机构将证书签名添加在数字证书上,构成完整的数字生出。

 * 2、验证证书
   
   * 2.1 验证方使用相同的摘要算法计算证书实体的摘要;
   * 2.2 使用 CA 机构的公钥(浏览器和操作系统中集成了 CA 的公钥信息)解密证书签名;
   * 2.3 对比解密后的数据与计算的摘要是否一致,如果一致则是可信任的证书。



4.2 什么是证书颁发机构 CA?

证书颁发机构(certifcation authroity, CA)是负责数字证书的审批、颁发、归档和吊销等功能的机构,具有权威性。CA 机构分为 “根 CA”
和 “中间 CA”,原则上要避免根 CA 机构直接颁发最终实体证书,而需要由中间 CA
机构颁发最终实体证书。这是为了避免证书失效的影响范围,一旦根证书失效或被伪造,那么整个证书链都有问题。

4.3 什么是证书链?

证书链是多个数字证书建立的的证书验证链条。数字证书主要包含三个部分:用户信息、用户密钥以及 CA
机构对该证书实体的签名。为了验证证书实体的合法性,需要获得颁发该证书的 CA
机构公钥,这个公钥就存在于上一级证书中。因此,为了验证证书的合法性,就需要沿着证书链向上追溯直到根证书为止。

根证书是自签名证书,用户下载根证书就表示信任该根证书所有签发的证书。在操作系统或浏览器中,已经内置了一部分受信任的根证书。



4.4 数字证书的标准

数字证书主要包含三个部分:用户的信息、用户的公钥和 CA 对该证书实体信息的签名。目前的数字证书采用的是公钥基础设施(PKI)制定的 X.509
标准,目前已经有 3 个版本,其中比较常见的是 X.509 第三版的标准。主要格式如下:

字段描述版本 (Version)证书的版本信息序列号 (Serial Number)证书的唯一标识签名算法标识 (Hash)证书签名采用的算法有效期
(Validity)证书有效期的开始日期和结束日期持有者信息 (Subject)证书的持有者公钥 (Subject Public Key
Info)持有者构建的公共密钥颁布者信息 (Issuer)证书颁布者签名 (Certificate Signature)颁布者对证书实体的签名

--------------------------------------------------------------------------------


5. 总结

看到这里,你应该已经建立起数据安全传输的基本认知。大多数情况,我们是在讨论 HTTPS 协议时才会遇到加密、摘要、签名和证书等概念。事实上,这些概念不止于
HTTPS,但凡涉及到数据在非安全信道中流转时,就需要应用这些工具来实现数据安全传输。

后面,我会写一些文章,在更多具体场景中讨论数据安全传输,请关注~ 更多文章:

 * 在构建 Android Apk 时,需要进行应用签名。看完这篇文章后,你现在能说清楚应用签名的作用吗?具体分析:他山之石,可以攻玉!一篇文章看懂
   v1/v2/v3 签名机制

--------------------------------------------------------------------------------

参考资料

 * HTTPS 权威指南 —— 伊万 · 里斯蒂奇 著
 * 趣谈网络协议 · HTTPS 协议 —— 刘超 著,极客时间出品
 * 图解 HTTP(第 7、8 章)—— 上野宜 著
 * Java 加密与解密的艺术 —— 梁栋 著
 * 图解网络 —— 小林coding 著
 * VasDolly 实现原理 —— 腾讯 VasDolly 技术团队 著
 * HTTP 权威指南(第 12、13 章) —— [美] David Gourley,Brian Totty 等著

--------------------------------------------------------------------------------

> 创作不易,你的「三连」是丑丑最大的动力,我们下次见!



分类:
Android
标签:
Android
文章被收录于专栏:
从零到无穷大 —— 移动开发工程师的升级打怪之路
从零到无穷大 —— 移动开发工程师的升级打怪之路
🔥 Hi,我是丑丑。这里有 Android 进阶成长路线笔记 & 博客,欢迎跟着彭丑丑一起成长。内容包括:面试系列、工程系列、Java / Kotlin /
C++ 基础、Android 基础 & 核心技能、Android 开源 & JetPack 组件、NDK等。
🔥 Hi,我是丑丑。这里有 Android 进阶成长路线笔记 & 博客,欢迎跟着彭丑丑一起成长。内容包括:面试系列、工程系列、Java / Kotlin /
C++ 基础、Android 基础 & 核心技能、Android 开源 & JetPack 组件、NDK等。
关注专栏
安装掘金浏览器插件
多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有!
前往安装
相关课程
VIP
Android 进阶:基于 Kotlin 的 Android App 开发实践
Tony沈哲
1232购买
¥9.95
¥19.9
首单券后价
首单券后价
VIP
Flutter 完全手册
小德_Kurt
4821购买
¥14.95
¥29.9
首单券后价
首单券后价
评论
表情
图片
Ctrl + Enter发表评论
全部评论 5
最新
最热
删除
彭旭锐
VIP.3 渐入佳境
(作者) 🏆掘金签约作者 1年前
最近,我建了一个读者群。有兴趣一起来玩~
展开
收起
2
回复

删除
优弧
VIP.4 融会贯通
管理员| 运营负责人 @ 掘金 1年前
好久不见啊。。。
展开
收起
点赞
1
删除
彭旭锐
VIP.3 渐入佳境
(作者) 1年前
来了老哥
展开
收起
点赞
回复
删除
用户946929835448
1年前
来学习了,老板终于更新了
展开
收起
点赞
1
删除
彭旭锐
VIP.3 渐入佳境
(作者) 1年前

展开
收起
点赞
回复
78
5
收藏
相关推荐
1月前
后端 Java Spring Boot
SpringBoot实现电子文件签字+合同系统!
今天公司领导提出一个功能,说实现一个文件的签字+盖章功能,然后自己进行了简单的学习,对文档进行数字签名与签署纸质文档的原因大致相同,数字签名通过使用计算机加密来验证
 * 1.4w
 * 108
 * 15
   

3月前
前端
人生中的第一次被辞退
2022年8月26日下午5点半得到的通知,有10天的缓冲但没有补偿,理由是没有没有过试用期,离试用期还有10天。 一、咋进的公司?
公司与甲方签的一个单子快到时间了公司没人写,没怎么面试问了我以前写的
 * 13.5w
 * 665
 * 1026
   

2月前
后端
一篇搞懂Hash算法对称加密非对称加密公钥私钥签名证书国密算法(附JAVA案例)
前言
日常工作开发的过程中,我们经常会遇到一些涉及密码的场景,网上的答案千篇一律,常常让人眼花缭乱,对有选择恐惧症的人来说非常容易迷失在知识的海洋里无法自拔,对写代码有强迫症的人来说简直是毁灭性打击。
 * 247
 * 4
 * 评论
   

2年前
Java
Java开发中的加密、解密、签名、验签,密钥,证书,这篇就够了,赶紧收藏起来
OpenSSL:OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库libssl、应用程序命令工具以及密码算法库libcrypto。它使用标准的文件格式(PEM/CER/CRT/PKCS等)存储密钥和证书信息。
keytool:是密钥和证书管理工具。它出自于Ja…
 * 8604
 * 117
 * 5
   

7月前
Android iOS
想没想过自己做个APP?来,机会来了
想没想过自己做一个APP,自己当自己的产品,想怎么交互就怎么交互的那种。自己做设计,自己定逻辑,自己愉悦自己。
 * 4.6w
 * 544
 * 134
   

3月前
前端 Git 面试
女朋友说 Git 玩不明白,怎么办?安排!
前言 在某个月黑风高的晚上,一脸愁容的女朋友突然跟我说,Git
老搞不明白,有什么比较好的经验可以分享下吗,说时迟,那时快,二话不说,立马开始奋笔疾书...... 在平时的 Coding 过程中,我们
 * 6.1w
 * 1329
 * 193
   

5年前
Android GitHub 动效
关注我就能达到大师级水平,这话我终于敢说了
这句话我真的憋了好久。Android
工程师只要关注我,我就能让你达到大师级水平,不是面试时的吹牛逼水平,不是自我欺骗的了解皮毛的水平,是真正的开发实力。以前我有这个自信,没这个证据。但现在,证据我也有了。
关注我的人都知道,我这三个多月来一直在网上分享关于 Android 自…
 * 3.2w
 * 1066
 * 99
   

4年前
Android MVVM MVP
MVC、MVP、MVVM,我到底该怎么选?
MVC、MVP、MVVM是我们工作和面试中都比较重要的一块,但很多时候我们却有点迷惑。比如看了好多篇文章都搞不懂MVC到底是个啥本来想写个MVP写着写着就变成MVC了,到底Databing和MVVM之间有啥见不得人的关系。本篇文章主要从发展的角度来介绍,如mvp,mvvm的出现…
 * 4.1w
 * 377
 * 13
   

20天前
前端 后端 Java
为什么用公钥加密却不能用公钥解密?
一直以来我都在逃避写HTTPS。 毕竟。 HTTPS里名词太多。概念又巨繁琐。 实在是太难解释了,能不写我尽量不写。。。。
但为了让图解网络的知识体系尽量完整些。 今天,大家忍一忍。 我们就从对称加密
 * 8491
 * 105
 * 20
   

3年前
面试 前端
【1 月最新】前端 100 问:能搞懂 80% 的请把简历给我
半年时间,几千人参与,精选大厂前端面试高频 100 题,这就是「壹题」。 在 2019 年 1 月 21
日这天,「壹题」项目正式开始,在这之后每个工作日都会出一道高频面试题,主要涵盖阿里、腾讯、头条、百度、网易等大公司和常见题型。得益于大家热情参与,现在每道题都有很多答案,提…
 * 59.7w
 * 10427
 * 356
   

3年前
程序员
@程序员,你需要点金融常识
常常听见一句俗话:“越靠近钱的地方越能挣钱。”
很遗憾,以前的我总是对这句充满铜臭味的话视若罔闻——我是一名程序员,所以我的核心工作就是钻进代码的世界里,把代码写得尽可能的完善,少出 bug。
这种思维的局限性,一直把我封闭在一个很狭隘的世界里。我不肯去了解代码之外的世界,比如…
 * 3152
 * 15
 * 12
   

6年前
iOS
漫谈 iOS 程序的证书和签名机制
接触 iOS
开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕和崇拜。于是,花了一点时间去研究了一下
iOS 这套证书和签名机制,并撰文分享给需要的朋友。由于本人才疏学浅,多有遗漏或错误之处,还请大神多多指教。
 * 2812
 * 131
 * 3
   

3年前
Android
面试官:简历上最好不要写Glide,不是问源码那么简单
说到图片加载框架,大家最熟悉的莫过于Glide了,但我却不推荐简历上写熟悉Glide,除非你熟读它的源码,或者参与Glide的开发和维护。
使用Glide加载图片如此简单,这让很多开发者省下自己处理图片的时间,图片加载工作全部交给Glide来就完事,同时,很容易就把图片处理的相…
 * 5.4w
 * 800
 * 111
   

5年前
Android RxJava Kotlin
花了 4 个月整理了 50 篇 Android 干货文章
从第 1 篇文章到现在已经 4 个月了,按类别整理一波技术干货。 目录 热门技术 View 代码封装 源码分析 精进之路 热门技术 Kotlin 初探
Kotlin 成了 Google 的亲儿子,现在赶紧来学学跟着 google 学习 mvp 架构跟着 google 学习 mvp 架构(clean
篇)给初学者的…
 * 4.1w
 * 2583
 * 47
   

5年前
Android Android Studio
Android 开发时,那些相见恨晚的工具或网站!
在实际 Android 开发过程确实会有很多相见恨晚的工具或网站出现,本文是我自己的一些分享。
 * 2.1w
 * 1675
 * 16
   

2年前
程序员
为什么非对称加密比对称加密慢?
这个问题是一个读者面试时遇到的一个问题,准备过面试的人应该都记得,非对称加密与对称加密的区别之一就是非对称加密的速度慢,但是我们做业务开发的时候通常都是直接调用算法,对其原因并没有过多深究,因此如果有面试官问到了这个问题,的确会让人措手不及。正好借着这篇文章来说一说。
首先我们…
 * 3657
 * 3
 * 评论
   

4年前
后端 安全 算法
3分钟告诉你什么是 非对称加密、对称加密、公钥、私钥、数字证书、数字签名、信息摘要、中间人攻击、CA、根证书
非对称加密、对称加密、公钥、私钥、数字证书、数字签名、信息摘要等等,其实这些都是通讯安全中的概念,既然如此我们不妨从通讯开始入手。
礼和弥是一对异国恋人,尽管相距很远,但是却不影响彼此之间的爱慕之情,她们喜欢通过网络来交流。 一天礼要给弥发送一份非常私密的内容。礼不希望通讯过程…
 * 2521
 * 27
 * 1
   

2年前
编程语言
一文彻底搞懂加密、数字签名、数字证书!
这本是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视频。
你要说这个,那我可来劲了,于是乎从加密、数字签名一直讲到了数字证书。。。终于把女朋友讲睡着了,独自写下这篇文章。
这篇文章,主要围绕数字签名和数字证书的原理以及它们的作用展开。 争取做到…
 * 1324
 * 3
 * 评论
   

3年前
前端 程序员
《单核工作法图解》阅读摘要
所谓单核工作法,就是在设定好的时间内,一次只做一件事,但与此同时,又根据变化着的全局重新设定工作重心。本书会从心理学的角度阐述这种方法的原理。
番茄工作法如果你一直使用不彻底,那么单核工作法舍去了一切不必要的元素,从而足够简单。如果你希望追求效率,但往往无法保持专注,或者你自诩…
 * 4267
 * 80
 * 16
   

4年前
Android
好用漂亮的Android 表格框架
附上其他文章:如何生成一个表格美化格式化数据动效缩放事件排序支持二维数组其他支持首尾动态添加数据设置单个格子背景设置单个格子字体分页其他github地址https://github.com/huang
 * 5.3w
 * 784
 * 98
   

友情链接:

 * 劫掠诸天:从铠甲勇士开始
 * 四合院:贾东旭是我爸爸?
 * 暴躁阴鸷少爷靠我拍拍才会乖乖
 * 七零空间:她被糙汉拐回家宠坏了
 * js 正则表达式替换div
 * sparkle images png
 * java如何将字符串拆分
 * svg转png java
 * java判断一个数是不是左右对称
 * java如何求循环里的和

彭旭锐
VIP.3 渐入佳境
🏆掘金签约作者
关注
私信

2020年度人气作者No.95
获得点赞  5,395
文章被阅读  559,393
 * 

相关文章
Java开发中的加密、解密、签名、验签,密钥,证书,这篇就够了,赶紧收藏起来
117点赞
 · 
5评论
落地西瓜视频埋点方案,埋点从未如此简单
224点赞
 · 
43评论
NDK | 带你梳理 JNI 函数注册的方式和时机
29点赞
 · 
1评论
一套用了 70 多年的计算机架构 —— 冯·诺依曼架构
11点赞
 · 
2评论
Gradle 系列(1)为什么说 Gradle 是 Android 进阶绕不去的坎
113点赞
 · 
7评论
目录
 * 前言
 * 目录
 * 1. 概述
   * 1.1 CIA 三要素
   * 1.2 非安全信道的风险
   * 1.3 如何实现传输安全?
 * 2. 加密 —— 防窃听
   * 2.1 什么是加密?
   * 2.2 对称加密和非对称加密的区别?
   * 2.3 数据加密标准 —— DES
   * 2.4 高级加密标准 —— AES
   * 2.5 RSA 算法
   * 2.6 DH 算法
   * 2.7 安全系统中为什么要使用随机数?
   * 2.8 计算机如何生成随机数?
 * 3. 数字签名 —— 验证完整性 & 认证数据来源
   * 3.1 什么是数字签名?
   * 3.2 为什么数字签名可以验证完整性?
   * 3.3 为什么数字签名可以认证数据来源?
   * 3.4 摘要算法存在碰撞,是不是不安全?
   * 3.5 为什么摘要中需要加盐?
   * 3.6 可以先使用私钥对原数据签名,再对签名进行摘要吗?
 * 4. 数字证书 —— 安全地发放公钥
   * 4.1 什么是数字证书?
   * 4.2 什么是证书颁发机构 CA?
   * 4.3 什么是证书链?
   * 4.4 数字证书的标准
 * 5. 总结
   * 参考资料

下一篇

--------------------------------------------------------------------------------

为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?
收藏成功!
已添加到「」, 点击更改
 * 微信
   微信扫码分享
 * 新浪微博
 * QQ



沉浸阅读

稀土掘金浏览器插件——你的一站式工作台
多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有。





选择你感兴趣的技术方向
后端
前端
Android
iOS
人工智能
开发工具
代码人生
阅读
跳过
上一步
至少选择1个分类