• Smallfly
    2018-11-07
    课后思考:

    区块链是一块块区块组成的,每个区块分为两部分:区块头和区块体。

    区块头保存着 自己区块体 和 上一个区块头 的哈希值。

    因为这种链式关系和哈希值的唯一性,只要区块链上任意一个区块被修改过,后面所有区块保存的哈希值就不对了。

    区块链使用的是 SHA256 哈希算法,计算哈希值非常耗时,如果要篡改一个区块,就必须重新计算该区块后面所有的区块的哈希值,短时间内几乎不可能做到。
    展开

    作者回复: 👍

     7
     273
  • 雪无痕
    2018-11-07
    除了hash+salt,现在大多公司都采用无论密码长度多少,计算字符串hash时间都固定或者足够慢的算法如PBKDF2WithHmacSHA1,来降低硬件计算hash速度,减少不同长度字符串计算hash所需时间不一样而泄漏字符串长度信息,进一步减少风险。
     4
     107
  • oyt
    2018-11-13
    加salt,也可理解为为密码加点佐料后再进行hash运算。比如原密码是123456,不加盐的情况加密后假设是是xyz。 黑客拿到脱机的数据后,通过彩虹表匹配可以轻松破解常用密码。如果加盐,密码123456加盐后可能是12ng34qq56zz,再对加盐后的密码进行hash后值就与原密码hash后的值完全不同了。而且加盐的方式有很多种,可以是在头部加,可以在尾部加,还可在内容中间加,甚至加的盐还可以是随机的。这样即使用户使用的是最常用的密码,黑客拿到密文后破解的难度也很高。

    作者回复: 👍

     6
     77
  • Jerry银银
    2018-11-07
    原来“散列冲突”的数学原理是鸽巢原理,为啥大部分算法书上讲解散列表的时候,不提一下呢。搞得我平时向朋友解释为什么存在冲突的时候,用得都是“鸽巢原理的白话版”,而且在讲解的时候还不知道那就是鸽巢原理,很尬!

    离散数学的课必须得好好补完

    作者回复: 👍

    
     57
  • 王鸿运
    2018-12-18
    md5不应该称之为加密算法,所谓加密,肯定对应有解密,不管是简单的异或加密,还是对称加密算法(aes,des)或者是非对称加密(rsa,ecc),都有加密和解密方式
    而md5是不可逆的,因此不能称为加密算法,从名字来看,md5就算一个摘要算法,用于生成字符串的摘要信息以及签名校验信息
    
     44
  • 小龙的城堡
    2018-11-07
    老师您好,我有一个疑问就是hash算法用于加密数据,但是我理解的加密是需要对应解密的,但是hash算法并不能解密,这用应用更像是数字签名,不知道我理解是不是有问题,感谢!

    作者回复: 没错 可以理解为数字签名

     2
     33
  • 姜威
    2018-11-16
    带着问题来学习:
    1.如何防止数据库中的用户信息被脱库?
    2.你会如何存储用户密码这么重要的数据吗?仅仅 MD5 加密一下存储就够了吗?
    3.在实际开发中,我们应该如何用哈希算法解决问题?
    一、什么是哈希算法?
    1.定义
    将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。
    2.如何设计一个优秀的哈希算法?
    ①单向哈希:
    从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。
    ②篡改无效:
    对输入敏感,哪怕原始数据只修改一个Bit,最后得到的哈希值也大不相同。
    ③散列冲突:
    散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小。
    ④执行效率:
    哈希算法的执行效率要尽量高效,针对较长的文本,也能快速计算哈希值。
    二、哈希算法的常见应用有哪些?
    7个常见应用:安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。
    1.安全加密
    ①常用于加密的哈希算法:
    MD5:MD5 Message-Digest Algorithm,MD5消息摘要算法
    SHA:Secure Hash Algorithm,安全散列算法
    DES:Data Encryption Standard,数据加密标准
    AES:Advanced Encryption Standard,高级加密标准
    ②对用于加密的哈希算法,有两点格外重要,第一点是很难根据哈希值反向推导出原始数据,第二点是散列冲突的概率要小。
    ③在实际开发中要权衡破解难度和计算时间来决定究竟使用哪种加密算法。
    2.唯一标识
    通过哈希算法计算出数据的唯一标识,从而用于高效检索数据。
    3.数据校验
    利用哈希算法对输入数据敏感的特点,可以对数据取哈希值,从而高效校验数据是否被篡改过。
    4.散列函数
    散列函数中用到的哈希算法更加关注散列后的值能不能平均分布,以及散列函数的执行快慢。
    三、思考
    1.如何防止数据库中的用户信息被脱库?你会如何存储用户密码这么重要的数据吗?
    ①使用MD5进行加密
    ②字典攻击:如果用户信息被“脱库”,黑客虽然拿到的是加密之后的密文,但可以通过“猜”的方式来破解密码,这是因为,有些用户的密码太简单。
    ③针对字典攻击,我们可以引入一个盐(salt),跟用户密码组合在一起,增加密码的复杂度。
    2.现在,区块链是一个很火的领域,它被很多人神秘化,不过其底层的实现原理并不复杂。其中,哈希算法就是它的一个非常重要的理论基础。你能讲一讲区块链使用的是哪种哈希算法吗?是为了解决什么问题而使用的呢?
    展开
     1
     27
  • 🐱您的好友William...
    2018-11-08
    其实我感觉hash不可能做到无冲突的原理可以用机器学习里面的免费午餐理论解释,因为hash追求的其实就是机器学习中的best seperate,就是mapping之后,不只是把两个不一样的东西分开,还要保证两者足够远(最大margin),因为hash函数是要面对所有类型的数据分布,而免费午餐理论告诉我们:不存在一种完美的算法对所有类型的数据分布都能做到完美的分离,最好的算法一定是根据特定的数据分布特定设计出来的。所以像hash函数这种需要应对不特定数据分布的,需要广泛使用的,是一定不会将数据完美seperate的。

    作者回复: 👍

    
     19
  • FLYING
    2018-11-07
    越是复杂哈希算法越难破解,但同样计算时间也就越少。这句话应该是越多吧?

    作者回复: 谢谢指出 笔误 本来是想写“长”的 写成了“少”

    
     19
  • 0.618
    2018-11-08
    所有的安全措施,只是增加攻击的成本而已!!!
     1
     9
  • 大张
    2018-11-26
    加盐之后,盐是随机的,但对一个用户来讲,盐是固定的,而且肯定是存储的,那同样找到盐之后可以轻易计算hash了
     2
     6
  • 伯安
    2018-11-07
    哈希算法的特点有一条:从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)。

    可是JAVA中的MD5类不是有加密和解密方法吗?解密的过程,是不是代表哈希算法能够反向推导出原始数据呢?就这块比较困惑。。

    作者回复: 应该没有吧。有破解方法 但也是基于碰撞的。但它也只是最近才被破解的

     1
     6
  • smarttime
    2018-12-13
    salt存到数据库中,如果脱库了,通过彩虹表还是可以破解的对吗?请老师讲一下密码加盐最佳实践,在网上找了很多文章要么人云亦云,要么自以为是的重复造轮子,希望老师可以拿着当前大厂的真实方案来解惑
    
     5
  • chengzise
    2019-05-25
    1. hash不可能做到无冲突的原理,可以用数学中的函数映射来理解。hash函数本质就是明文空间到密文空间的映射,以md5为例,它的密文空间是2^128,明文空间是无穷大的,所以存在多个明文映射到同一个密文,不存在无冲突的hash。
    2. 同时,为什么说可以设计出md5等碰撞概率小的hash函数:虽然刚才说的明文空间是无穷大的,但是实际人类使用的明文空间没有想象中的那么大,例如:大量的文章都是相对于有意义的,随机的乱码文章,人类根本不会使用到。因此还是可以设计出在人类使用的明文空间的hash函数的
     1
     4
  • Qfxl
    2019-12-18
    大学专攻信息安全的闭门大弟子尝试解答一下留言区的问题,如有纰漏,请指正
    1. 盐一般需要跟哈希值一起储存,无须额外加密
    2. 盐要随机的,固定盐相当于没加。
    3. 为何盐泄漏了也相对安全?假设盐是8bits, 相比没盐的彩虹表,新彩虹表大约是原来的2^8倍大小,加大了破解难度,回应原文,没有绝对的安全
    4. 信息安全的一个重要假设是计算资源是有限的,很多安全措施都是增加破解成本。教授也强调量子计算可能会使现今所有加密手段失效。
    5. 文中提到的哈希算法都属于密码学工具,广义上也算是加密算法,更准确是数字签名或信息摘要算法,以区分开可解密的对称非对称加密算法
    6. 千万不要用MD5来存储密码!
    展开
    
     3
  • 落叶飞逝的恋
    2018-12-20
    老师有个问题:
    我们可以从图片的二进制码串开头取 100 个字节,从中间取 100 个字节,从最后再取 100 个字节,然后将这 300 个字节放到一块,通过哈希算法(比如 MD5),得到一个哈希字符串,用它作为图片的唯一标识。
    这里说的取图片的二进制码串头部、中部、尾部的100个字节,这样图片在第一次计算的时候,还是需要完全读取图片的流。第一次就很耗时呀?
    
     3
  • MrTin
    2018-11-11
    个人认为hash算法不能做加密用,因为解密不出来,文中说的不是准确

    作者回复: 我再去研究下 有没有要求说加密算法必须能解密才叫加密算法。这里你看以理解为数字签名

     1
     3
  • bro.
    2018-11-07
    java中是没有MD5的解密的,一个很简单的例子,一部电影可以加密成128为的MD5值存储,那么能将这128位的md5值还原成相对应的一部高清电影吗,如果可以的话,以后就不用拍电影了,直接写128位密码值还原一下就好了吗,网上的破解,只是维护一个密码表,暴力的一一对应,根据密码生成的MD5到表中查询是否存在,如果存在对应的密码值是?一般小公司要求不高的话会在密码前后加上特定的字符串在生成md5在上传保存的.有效避免常用密码被破解
    
     3
  • 张三
    2019-07-29
    7月最后一周了,继续加油,从6月10号开始的,希望能坚持下去!
    
     2
  • 坤
    2019-07-05
    SHA128 也被攻破了,Google的成果。
    
     2
我们在线,来聊聊吧