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

加密

说到加密,大家一定不会陌生,不管生活中或是各种影视剧,尤其是谍战剧,大家都会接触到「加密」。

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

比如电影《风声》的剧情,周迅将密文缝在衣服上赴死。

这个用线缝的就是影视剧中常听到的「摩斯电码」,严格来说「摩斯电码」不是密码,因为每个人都有它的「密码本」,不过这种形式(用密文替代原文)是比较常见的加密形式。前面提到的这些加密一般都是对文本信息加密,在计算机里加密可不仅仅涉及到文本,还涉及到图片、视频等。所以我们下面聊聊现代加密两种加密类型:对称加密非对称加密

对称加密

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

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

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

这肯定不是严格意义上的加密算法,这边只是演示下加密过程。

加解密过程如下图:

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

非对称加密

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

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

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

这也是一个不严谨的算法,真实的非对称加密需要很复杂的数学算法,此处也仅仅是辅助讲解的示例

非对称加密工作过程如下图:

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

数字签名

非对称加密的公钥是公开的,任何人都能看到,私钥是非公开的,加解密过程是公钥加密,私钥解密。那么反过来私钥加密能用公钥解密么,答案是可以。非对称加密的公私钥一般都是可以相互加解密。虽然可以相互加解密,但是它们公私钥的身份是不能互换的,因为一般非对称加密的私钥是可以推断出公钥(涉及到算法原理,本文不做讲解)。就是说私钥就是私钥,不能被公开,当做公钥。

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

我们生活中会有各种需要签名的场景,比如写「欠条」、「** 声明」都需要落款,手写名字、盖章或按手印。目的是让对方知道这谁写的,而不是伪造的,这是签名的作用。而数字签名也是起到同样的作用。

数字签名是非对称加密应用非常广泛的功能,其签名过程如下图:

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

不过数字签名一般不会对原始数据签名,因为原始数据体积有可能会比较大,不方便传输,所以一般会针对原始数据的摘要做签名。那什么是摘要,如何得到摘要数据,我们就需要了解下摘要算法Hash算法

摘要/Hash算法

摘要算法又称哈希算法散列算法。它通过一个算法,把任意长度的数据转换为一个长度固定的数据串。这是 Hash 算法的定义,很多人只看这一句可能看不太懂,“转成一个长度固定的字符串”,这样做的目的是啥,有什么用?没关系,我们先从懂的开始看,来看看“摘要”。

大家对摘要应该不会陌生,我们在写毕业论文时都会有一页摘要,其内容就是描述研究工作的主要对象和范围,采用的手段和方法,得出的结果和重要的结论,有时也包括具有情报价值的其它重要的信息。一句话总结就是,描述了论文的主要内容,读者阅读摘要就可以知道文章的基本信息,因为摘要内包含了文章的主要特征。

所以摘要算法跟论文摘要一样,它提取了目标数据的特征,用一个固定长度的字符串表示,其有以下特点:

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

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

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

为什么要强调 MD5 不是加密?因为加密跟摘要算法是没有任何关系,如果不将两者区分开,势必会混淆摘要算法与加密的理解。什么是加密?加密是使用加密算法对数据进行转换得到密文数据,并且可以通过解密算法对密文进行还原。而摘要算法的特点是只能进行正向的信息摘要,而无法从摘要中恢复出任何原始消息。从它们的工作机制我们也能看出两者并无联系。

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

摘要算法应用场景

隐私保护(保存用户口令)

由于摘要算法具有不可逆的特点,所以将用户口令以摘要形式存储是更合理的方式。这样可以防止任何人(包括公司的研发、运维人员)知晓用户的口令信息,也能保证即使服务器遭到攻击,数据泄露后,用户的口令会被泄露。而如果用户口令被明文存储,就会将用户置于较大风险之中。

这里有一个比较出名的反面教材,就是数年前的 CSDN ,当时其用户口令信息都是以明文形式存储,不巧的是他们的数据库泄露,导致大量的用户口令信息暴露。感兴趣的可以搜一下 CSDN 数据库泄露事件。

数字指纹

有些网站提供了可下载文件的 MD5 或 SHA 的 hash 值,这个值就是这个文件的摘要或指纹信息。我们在文件下载完成后可以比对已下载文件的 hash 值,如果一样,说明下载的文件是完整的、没有被篡改的。反之,则文件有可能不完整,或不一样,总之肯定跟原网站的文件不完全相同。换句话说,这个 hash 是一个指纹信息,可以用这个信息代表生成这个指纹的数据。

完整数字签名流程

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

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

这样便是一个完整的数字签名与验签的过程

总结

对称加密概念比较简单,大家生活中随处可见相关应用。

非对称加密相对比较复杂,大家比较熟悉的 RSA 是有三个数学家 (Ron Rivest、Adi Shamir、Leonard Adleman) 提出的。因为复杂,所以非对称加密的计算效率也远远低于对称加密。

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

作者:PuddingSama
链接:https://juejin.cn/post/7230001506111815736

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值