链客,专为开发者而生,有问必答!

此文章来自链客区块链技术问答社区,未经允许拒绝转载。

摘要:最近有朋友在后台问为啥最近老介绍hash相关文章,其实hash算法在信息安全中非常重要,尤其是作为数字签名中非常重要的一环,今天就来详细把这个事情讲清楚 白话hash 可能以前的文章讲得不够简单,hash算法其实就是将一段非常长的数据通过hash变换为一个固定长度相对较短的数据,简称“摘要”,你可以理解成把一本书通过hash变成一段很短的话,算法最关键的要点是,哪怕你改动了这本书里面的一个标点符号,hash后的摘要都会改变。

最近有朋友在后台问为啥最近老介绍hash相关文章,其实hash算法在信息安全中非常重要,尤其是作为数字签名中非常重要的一环,今天就来详细把这个事情讲清楚

可能以前的文章讲得不够简单,hash算法其实就是将一段非常长的数据通过hash变换为一个固定长度相对较短的数据,简称“摘要”,你可以理解成把一本书通过hash变成一段很短的话,算法最关键的要点是,哪怕你改动了这本书里面的一个标点符号,hash后的摘要都会改变。(累死我了,我发现说大白话讲技术问题挺难的)

以MD5这种hash算法为例,他可以将任意长度的数据变成128位的散列值,所谓任意长度的意思就是你的数据可以是一篇文章,一部电影,或者只是一个字母,哪怕是个空字符串,下面这个就是MD5一个空字符串后的值:

MD5("")= d41d8cd98f00b204e9800998ecf8427e

这个例子只是说明hash可以将任意长度的数据变为一个固定长度的值,算法的精妙在于这个值对于不同的数据还是不一样的,如果不同的数据生成的hash值一样,就是有名的“hash碰撞了”

其实hash适合于比较大的数据做摘要,不能作为加密使用,很多误传为MD5加密,也有人称之为单向加密,就是指不能通过hash后的值不能推导原来的数据,这种说法不够严密,比如很多网站喜欢将用户的密码经过MD5变换后存储,主要防止数据库泄露后直接查看用户的密码,真正密码比对时对用户输入的密码进行md5变换然后和存储的md5值比较

从密码学上讲加密过程都要对应解密过程,即可以通过密文还原明文,所以以上的密码保护方法不是严格意义上的数据加密解密。

对于以上方法,一般采用md5字典进行暴力解密,只需要对原有的密码字典进行MD5变换,然后进行字典比对,不会增加太多的计算复杂度,比如你看到d41d8cd98f00b204e9800998ecf8427e这个值就知道代表的是一个空字符串。

不对称加密

所谓不对称加密,是对于对称加密而言的,传统的对称加密只有一个秘钥(你可以理解为密码),你用这个秘钥加密,别人也用这个秘钥解密,这里面有个弊端就是,你把解密的密码告诉别人时,比如发短信、发微信,这时候回受到中间人攻击,简单举例说就是运营商等会看到你发的密码,然后你们之间的通讯数据就被解开。

后来英国人搞出来不对称加密,它包含两个成对的密钥,这里面有个概念一定要搞清楚,这个两个成对的秘钥是同时生成的,数学上存在一定关系,并没有严格意义上的哪一个必须是公钥,哪一个必须是私钥,你公布出去的那个就是公钥,你保留的那个就是私钥,看你高兴。

需要注意的时,不同的算法在设计时,为了保障效率公钥会采用固定值生成,比如RSA算法建议公钥的运算e1取值为3或65537(从理论上说迭代猜中的几率更大),所以在实际应用中最好按照推荐选择保留自己的私钥

另外一个概念来了,这是很多人对于后期数字签名比较容易搞蒙圈的地方,首先我们要知道对于不对称加密一个重要特点就是:公钥加密的数据私钥可以解密,私钥加密的数据公钥可以解密,记住这句话后面的数字签名原理你就能搞清楚。

数字签名

前面讲了不对称加密,现在你有了一个可以公布出去的公钥的,公钥的作用就是公布出去,如果对方想给你发信息,他就可以可以用你的公钥进行数据加密然后发给你,你用你的私钥解密数据,即便是中间人截获你的公钥也没用。如果你想给对方发加密信息,那么就反过来需要知道对方的公钥即可。所以不对称加密最重要的就是保护你的私钥,这就是我们常说的使用不对称算法进行加密数据传输。

那么数字签名又是什么呢,其实也很简单了,大白话来讲也是一个加密解密过程,就是将数据用你的私钥进行加密,然后把明文和密文都发给对方,对方用你的公钥对密文进行解密,然后比对解密后的明文是不是一样,这样就证明这个数据没有被第三方篡改,的确是你书写的

现在hash算法的重要性要出来了,如果你发送的数据非常短,比如“我爱你”“我恨你”这些很短的句子,你是用不到hash算法的,你只需要用你私钥加密这些短句,然后把 “我爱你”连同加密后的数据比如"@#@#%",一起发过去,对方用你的公钥解开一看果然是“我爱你”,证明没有被篡改,如果解开一看是“我恨你”,就说明在传输过程被中间人篡改了。

如果你发的是一大段文字,比如万字情书什么的,你也可以使用刚才的方法进行签名,那么你就要发送很长一段的密文和明文给对方验证,这明显是浪费资源的。

第一节说过,你终于可以使用hash算法,hash算法就是可以把很长的数据摘要成很短的一段数据,比如采用MD5后只有128位,现在你就可以使用MD5摘要你的万字情书了,得到一个128位的摘要,然后你使用你的私钥对这个128摘要进行加密,这个过程就叫做数字签名,所以数字签名是两个过程,先对数据进行hash摘要,然后对摘要进行私钥加密。

然后你只需要把你的情书和私钥加密后的摘要发给对方就行了,这明显减少了传输量,也让签名变得专业了(呵呵)。对方收到你的情书和加密摘要后,只需要对情书同样进行一次hash运算,得到一个128位数据,然后用你的公钥解密你发过来的摘要,如果这两个数据一样就证明这篇情书里面一个标点符号都没有改变,如果不一样,就证明数据在传输过程中被人篡改过,不是你所写,这个过程就叫做验证签名。

现在你明白hash算法的重要性了吧,简而言之,如果hash算法被攻破,中间人可以篡改你的数据,并保证篡改过的数据有一样的hash值,那么数字签名的基石就被动摇了

注:还有一种数字信封技术,可以让传递明文和签名更加安全,其实原理都差不多,明白加密原理后,你自己都能想出来这些所谓的数字信封、数字信笺、数字包裹一类的看似高大上的名词

白话hash和数字签名,保证你看得懂相关推荐

  1. 数据挖掘的10大算法我用大白话讲清楚了,新手一看就懂

    一个优秀的数据分析师,除了要掌握基本的统计学.数据库.数据分析方法.思维.数据分析工具技能之外,还需要掌握一些数据挖掘的思想,帮助我们挖掘出有价值的数据,这也是数据分析专家和一般数据分析师的差距之一. ...

  2. c语言求出现次数最多的字符,保证你看懂

    保证你看懂,因为这是一个小白写的代码. 还只做了几十个题,网上搜的都看不懂.但了解了思路,自己琢磨了好久终于写出来了. #include<stdio.h> int main() {     ...

  3. 企业微信3种裂变玩法,保证你一看就懂

    前段时间wetool被封杀,很多小伙伴都在寻找替代的运营工具.这样一来,企业微信作为官方运营工具,可以说是我们做私域流量.精细化运营客户的唯一选择. 企业微信作为新的私域流量工具,存在大量的机会,越早 ...

  4. 只有程序员看的懂面试圣经

    技术圈 只有程序员看的懂面试圣经|如何拿下编程面试 http://www.epubit.com.cn/article/197 当我最初开始参加编程面试的时候,我所有最心仪的公司都忽视了我.现在回头看那 ...

  5. 只有程序员看的懂的面试圣经|如何拿下编程面试

    只有程序员看的懂的面试圣经|如何拿下编程面试 摘要:当我最初开始参加编程面试的时候,我所有最心仪的公司都忽视了我.现在回头看那个时候,我发现自己当时去参加面试都完全没做任何准备.虽然已经有许多博客文章 ...

  6. 【机器学习】小孩都看得懂的 GAN

    全文共 6327 字,55 幅图, 预计阅读时间 32 分钟. 本文是「小孩都看得懂」系列的第十八篇,本系列的特点是内容不长,碎片时间完全可以看完,但我背后付出的心血却不少.喜欢就好! 小孩都看得懂的 ...

  7. 史密斯圆图串并联口诀_看得懂的史密斯圆图(个人总结)

    看得懂的史密斯圆图(个人总结) 2018-09-11 史密斯圆图(Smith chart)是一款用于电机与电子工程学的圆图,主要用于传输线的阻抗匹配上.一条传输线(transmission line) ...

  8. 一看就懂系列之 如何实现与控制php常驻进程

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言 关于如何实现与控制php常驻进程,不管是google还是baidu上进行搜索,都没有感觉看起来赏心悦目的解答,于是决定自己 ...

  9. 位置度标注方法图解_新整理!安装工程施工图解手册,多彩文字标注现场图片,一看就懂...

    新整理!安装工程施工图解手册,多彩文字标注现场图片,一看就懂 在一个建筑工程项目中,安装工程是极为重要的一部分,其施工质量可以直接影响人们的生活质量.因此,近年来,各单位对于安装工程的施工做法要求越来 ...

最新文章

  1. 你真的懂switch吗?聊聊switch语句中的块级作用域
  2. redis如何通过读写分离来承载读请求QPS超过10万多
  3. ng-notadd 0.17.1 发布,基于 Angular 的企业级中后台
  4. 【Python】调用百度云API文字识别服务 OCR
  5. 计算机网络·数据链路层.三个基本问题
  6. MySQL部署2002_MySQL入门02-MySQL二进制版本快速部署
  7. poj-2828 Buy Tickets ***
  8. linux fdisk 磁盘空间使用率,linux查看磁盘剩余空间以及cpu使用情况
  9. Mac下Git项目使用的.gitignore文件
  10. hun 暑期实训之打牌 cin与scanf的输入
  11. python学习笔记之——装饰器及对象
  12. ubuntu20.04下开发海康威视网络摄像头sdk(二)云台基本控制(位姿控制)
  13. 电脑大小写怎么切换_电脑键盘上的三个灯都起什么作用
  14. 【基础知识】~ 集成电路设计流程,以及各阶段所使用的EDA工具
  15. windows下安装wget
  16. android 汉字笔画拆写,汉字笔画顺序之重新开启
  17. win10禁用全角_Win10微软拼音无法切换输入法全角和半角怎么办?
  18. 自学单片机是否先学c语言,学习单片机需要先学好C语言再去学单片机吗
  19. androidstudio图片居中_Android imageView图片按比例缩放-Fun言
  20. 企业 SDLC 安全生命周期管理

热门文章

  1. 微信小程序导航栏设置透明
  2. spark编程基础--5.1RDD编程基础
  3. 设置status bar的颜色
  4. html 省份,城市 选择器附效果图
  5. 【仿去哪儿】滑动隐藏导航栏
  6. 【转】不分主副卡!全网通5.0时代到来
  7. 开源:Angularjs示例--Sonar中项目使用语言分布图
  8. ubuntu 编译源码包 dsc diff.gz orig.tar.gz
  9. 深入掌握JMS(一):JMS基础
  10. Linux 服务器日志文件查找技巧精粹