前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机密码学1_散列算法

计算机密码学1_散列算法

作者头像
玖柒的小窝
修改2021-11-02 11:00:20
3930
修改2021-11-02 11:00:20
举报
文章被收录于专栏:各类技术文章~各类技术文章~

我也不是专业的,请带着思考阅读.

还有就是,文中的白话,别杠.

关键字:

不可逆hash散列

0.背景

接下来讨论的几节内容,是由下面这张图扩展开来.

image-20211030011847077
image-20211030011847077

1.散列

散列就是不可逆算法的实现.

类似于指纹,每个人都有一个独特的指纹,人不同,指纹也就不同.

在计算机的世界里,每个文件也可以有自己的一个散列值,字符串、视频、语音等等都可以转换成二进制的数据,他们都能拥有自己的散列值,每个文件的散列值同样可以是独一无二的.

散列是一种不可逆运算,通过输入x,通过一定的函数运算,可以得到一个结果y.当x固定时,输出的y也总是固定的.

日常生活中,像什么hash、不可逆运算等等,你都可以简单的理解为散列.

它具有以下特点:

  • 固定大小
  • 雪崩效应
  • 单向
  • 冲突避免

2 特点

要设计一个良好的Hash算法,应该满足以下要求.

2.1 固定大小

不管多大的数据,得出的hash值长度都是一样的.

看下图这个漏斗,我们可以形象的理解为,不管多大的东西进去,出来的值总是固定大小的.

不同的散列算法,得出的散列值长度是不一样的,如MD5为128bit.

image-20211030003434303
image-20211030003434303

2.2 雪崩效应

稍微修改一点,哪怕是小小的1bit,得出的hash值都是截然不同的.

类似于双胞胎,看起来哪里都一样,但是指纹确实完全不同的.

2.3 单向

拿着指纹反向推导出这个人,是一件困难的工作.

我们可以通过入参x计算出hash值y,但是反向推导是不可行的,即不能通过hash结果y轻易计算出源数据x.

2.4 冲突避免

对于不同的文件,我们应该尽量确保计算出的hash值是不一样的. 对于输入的数据,如果你的hash算法结果很容易一样,这并不符合我们的要求.

我们要尽量去确保散列算法能避免冲突,但是能完全避免也是不合理的.

以MD5为例,入参是整个宇宙,但是结果总归只有那么128位,是可能存在入参不同但是hash值却相同的情况.

3 实例

网上下文件的时候,经常看到后面一个什么MD5值,SHA值,为啥要写个这个?

下载下来文件后,你可以拿相应的计算工具去计算这个文件的MD5值,如果传输过程中文件有损坏/修改,得出的MD5值将会不一样.

这样,我们就能确保下载下来的文件跟官网的文件是完全一样的.

那玩意数据库里的密码竟然存的是HASH值?

由于不可逆的特性,你破解数据库拿到数据后,看到一堆hash值,也很难猜到真实的用户密码.

那我存成hash值,怎么知道用户输入的明文密码对不对啊?

拿到密码计算hash值,跟库里面的hash值一样,那不就对了吗.

4 扩展

由于算法是单向的,我们很难通过hash值反向得出源数据.像上面这个密码的场景,有心人可以存一个密码库.

记录下常见的"源数据-hash值",我拿着hash值查表,这不把密码找到了吗?

所以呀,让你不要用常见的密码,给你整个hash骗骗眼睛又怎么样,hash值都被别人存起来了.

只要咱的库够全,你的hash值我也有机会找到.

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.背景
  • 1.散列
  • 2 特点
    • 2.1 固定大小
      • 2.2 雪崩效应
        • 2.3 单向
          • 2.4 冲突避免
          • 3 实例
          • 4 扩展
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档