我正在参加「掘金启航方案」

加密

提到加密,咱们一定不会陌生,不管日子中或是各种影视剧,尤其是谍战剧,咱们都会接触到「加密」。

比方打麻将跟损友约好,摸耳朵便是要“筒子”,摸鼻子便是要“条子”。

什么是对称、非对称加密?Hash是加密么?
比方电影《风声》的剧情,周迅将密文缝在衣服上赴死。

什么是对称、非对称加密?Hash是加密么?
这个用线缝的便是影视剧中常听到的「摩斯电码」,严厉来说「摩斯电码」不是暗码,由于每个人都有它的「暗码本」,不过这种方法(用密文代替原文)是比较常见的加密方法。前面提到的这些加密一般都是对文本信息加密,在核算机里加密可不仅仅涉及到文本,还涉及到图片、视频等。所以咱们下面聊聊现代加密两种加密类型:对称加密非对称加密

对称加密

对称加密跟前文提到的「摩斯电码」比较像,运用加密算法和密钥对数据进行转换,得到密文数据,再根据密钥和解密算法对密文进行复原,得到原始数据。

比方我规划一个简单的加密算法,只针对数字,每位数减对应的密钥,那么对应的解密则每位加密钥。

  • 原始数据:4398
  • 密钥:5
  • 加密成果:-1-243

这必定不是严厉意义上的加密算法,这边只是演示下加密进程。

加解密进程如下图:

什么是对称、非对称加密?Hash是加密么?

经典对称加密算法首要有DES、3DES、AES等。

非对称加密

对称加密是只需一个密钥,而非对称加密一般有两个密钥,加解密进程是用某一个加密,另一个「解密」。两个密钥会有一个揭露,任何人都能知道,称之为公钥,而另一个不能揭露,称之为私钥。通常会用公钥加密,私钥「解密」,这里的「解密」之所以加引号,是由于其实非对称加密没有解密,它用私钥复原数据的进程也是加密,只不过针对密文的加密算法会得到原始数据。

比方我再规划一个非对称加密算法,只针对数字,算法为对每位数做加法。两个密钥分别为28

  • 原始数据:230
  • 公钥:2
  • 加密成果:452
  • 解密:运用私钥8再做一次加法,保留最低位,如:4+8 = 12,保留最低位 2,最后会的到原始数据 230

这也是一个不严谨的算法,真实的非对称加密需求很杂乱的数学算法,此处也仅仅是辅佐解说的示例

非对称加密作业进程如下图:

什么是对称、非对称加密?Hash是加密么?

经典非对称加密算法首要有RSA、DSA

数字签名

非对称加密的公钥是揭露的,任何人都能看到,私钥对错揭露的,加解密进程是公钥加密,私钥解密。那么反过来私钥加密能用公钥解密么,答案是能够。非对称加密的公私钥一般都是能够相互加解密。尽管能够相互加解密,可是它们公私钥的身份是不能交换的,由于一般非对称加密的私钥是能够推断出公钥(涉及到算法原理,本文不做解说)。便是说私钥便是私钥,不能被揭露,当做公钥。

假如「Tony」给我发了一条音讯message,中心经过很多快递小哥转手,我其实是无法判断message有没有被篡改的。所以「Tony」想了个法子,申请了非对称加密的公钥public私钥private,并告知我他的公钥是什么。所以他重新发音讯给我,内容是[private-message] + message + public,我在收到音讯后用public[private-message]进行复原,得到成果[message-restore]message匹配,假如完全相同,则一定能确认音讯是来自「Tony」,对吧。由于私钥加密只能用公钥解密,而我知道公钥归于「Tony」,那只需能复原成果,那音讯就没有被篡改。这就对错对称加密的另一个运用场景数字签名。「Tony」用私钥对音讯加密,相当所以给音讯做了签名

咱们日子中会有各种需求签名的场景,比方写「欠条」、「** 声明」都需求落款,手写名字、盖章或按手印。意图是让对方知道这谁写的,而不是假造的,这是签名的效果。而数字签名也是起到同样的效果。

数字签名对错对称加密运用非常广泛的功能,其签名进程如下图:

什么是对称、非对称加密?Hash是加密么?

  • 用私钥对原始数据加密,生成签名数据
  • 用公钥对签名数据解密,生成成果与原始数据匹配,
  • 匹配一致则能保证原始数据未被篡改

不过数字签名一般不会对原始数据签名,由于原始数据体积有或许会比较大,不方便传输,所以一般会针对原始数据的摘要做签名。那什么是摘要,怎么得到摘要数据,咱们就需求了解下摘要算法Hash算法

摘要/Hash算法

摘要算法又称哈希算法散列算法。它经过一个算法,把恣意长度的数据转换为一个长度固定的数据串。这是 Hash 算法的界说,很多人只看这一句或许看不太懂,“转成一个长度固定的字符串”,这样做的意图是啥,有什么用?不要紧,咱们先从懂的开端看,来看看“摘要”。

咱们对摘要应该不会陌生,咱们在写毕业论文时都会有一页摘要,其内容便是描绘研究作业的首要方针和规模,选用的手段和方法,得出的成果和重要的定论,有时也包含具有情报价值的其它重要的信息。一句话总结便是,描绘了论文的首要内容,读者阅读摘要就能够知道文章的基本信息,由于摘要内包含了文章的首要特征。

所以摘要算法跟论文摘要相同,它提取了方针数据的特征,用一个固定长度的字符串表明,其有以下特色:

  • 能够表明恣意长度数据特征。比方 1MB、1GB 的数据,他们的摘要值都是 128 位。
  • 一般地,只需输入的音讯不同,对数据进行摘要以后产生的摘要音讯也必不相同;但相同的输入必会产生相同的输出。
  • 只能进行正向的信息摘要,而无法从摘要中康复出任何原始音讯。

经典的摘要算法首要有:MD5SHA1SHA256

诶,MD5?咱们貌似经常能听到 MD5 加密?先说定论:MD5 不是加密。鲁迅先生也从前说过“我哪怕死了,被钉在棺材里,也要用迂腐的声音喊出「MD5不是加密不是加密不是加密」”。

为什么要着重 MD5 不是加密?由于加密跟摘要算法是没有任何关系,假如不将两者区分隔,势必会混杂摘要算法与加密的理解。什么是加密?加密是运用加密算法对数据进行转换得到密文数据,并且能够经过解密算法对密文进行复原。而摘要算法的特色是只能进行正向的信息摘要,而无法从摘要中康复出任何原始音讯。从它们的作业机制咱们也能看出两者并无联络。

在了解什么是摘要算法后,咱们再聊聊,它有什么用?

摘要算法运用场景
隐私维护(保存用户口令)

由于摘要算法具有不可逆的特色,所以将用户口令以摘要方法存储是更合理的方法。这样能够避免任何人(包含公司的研发、运维人员)知晓用户的口令信息,也能保证即便服务器遭到攻击,数据走漏后,用户的口令会被走漏。而假如用户口令被明文存储,就会将用户置于较大危险之中。

这里有一个比较知名的反面教材,便是数年前的 CSDN ,其时其用户口令信息都是以明文方法存储,不巧的是他们的数据库走漏,导致很多的用户口令信息露出。感兴趣的能够搜一下 CSDN 数据库走漏事情。

数字指纹

什么是对称、非对称加密?Hash是加密么?
有些网站提供了可下载文件的 MD5 或 SHA 的 hash 值,这个值便是这个文件的摘要或指纹信息。咱们在文件下载完成后能够比对已下载文件的 hash 值,假如相同,说明下载的文件是完好的、没有被篡改的。反之,则文件有或许不完好,或不相同,总归必定跟原网站的文件不完全相同。换句话说,这个 hash 是一个指纹信息,能够用这个信息代表生成这个指纹的数据。

完好数字签名流程

在了解摘要算法后,咱们再继续看前文的数字签名流程。前面的签名流程,需求接收者拿到私钥加密后的数据「原数据-加」和原数据,而咱们知道「原数据-加」与原数据的体积是差不多的,在数据体积较大的时分传输功率必定会比较低。所以数字签名一般不会对原数据签名,而是对原数据的 hash 签名,完好流程如下:

什么是对称、非对称加密?Hash是加密么?

  • 核算得到原始数据的「摘要信息」
  • 将「摘要信息」用私钥加密-即签名
  • 把原数据和「签名后的摘要」打包给方针用户
  • 用户先核算原数据的「摘要信息」,再用公钥解密「签名后的摘要」得到「待验证的摘要」,最后再与「摘要信息」比对

这样便是一个完好的数字签名与验签的进程

总结

对称加密概念比较简单,咱们日子中随处可见相关运用。

非对称加密相对比较杂乱,咱们比较熟悉的 RSA 是有三个数学家 (Ron Rivest、Adi Shamir、Leonard Adleman) 提出的。由于杂乱,所以非对称加密的核算功率也远远低于对称加密。

摘要算法不是加密,它们两者没有关系!