• 彩色的沙漠
    2020-12-01
    一直没有看明白单向哈希函数关于输入数据能力的限制,找了一篇博客回头在看我们的专栏恍然大悟。 以SHA256举例:输入数据长度不是512的整数倍的话,需要预处理填充 1.在报文末尾进行填充,使报文长度在对512取模以后的余数是448 填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。 2.附加长度值 SHA256用一个64位的数据来表示原始消息的长度 附加长度值就是将原始数据(第一步填充前的消息)的长度信息补到已经进行了填充操作的消息后面 因此,通过SHA256计算的消息长度必须要小于$ 2^64 $,当然绝大多数情况这足够大了 最后经过上面两步448+64=512 刚好是512的整数倍 参考地址:https://blog.csdn.net/u011583927/article/details/80905740/

    作者回复: 赞!

    
    21
  • 于途
    2020-12-01
    老师,请问数据补齐方案示意图中的俩数字,423 和 871 具体含义是什么呢?

    作者回复: 很多同学关心这个细节,这很棒。看来这个专栏可以讲的再深入一些,聊聊算法的设计细节。 SHA-1不是使用64位的来表示输入数据长度吗?一个数据块是512位,除掉64位,还剩448位。数据是三个字节,24位。除掉24位,还剩424位。去掉补齐数据开始的标识位(也就是423前面的1),还剩423位。 这423位要用零填充。这就是423的来源。你自己试着拆解一下SHA-512?

    共 3 条评论
    3
  • 于途
    2020-12-01
    如果输入数据长度超过了数据补齐方案的限制,数据就没有办法分组了 老师,这句话应该怎么理解呢?

    作者回复: 比如说,填充方案里需要指明原始数据长度,指明这个数据长度的使用64位来表示。64位能表示的数最大就是2^64。如果需要进行散列值计算的数据超出2^64,这个填充方案就没有办法使用了,因为长度超出了它能够表达范围,溢出了。

    共 2 条评论
    2
  • 陈学彬
    2021-03-29
    老师,看了其他人留言,明白了补齐数据那张图中423 和 871的由来,但不太明白说的“数据是三个字节,24位”,这个数据是什么数据,为什么要用占用三个字节。

    作者回复: 看图前面的ABC,就是这三个字节。 例子而已,例子使用了三个字节,所以就是三个字节。

    
    1
  • 彩色的沙漠
    2020-12-01
    SHA256,输入长度不是512位 在报文末尾进行填充,使报文长度在对512取模以后的余数是448 填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。

    作者回复: 对的。448的来源,是要剪掉表达数据长度的位数,这个位数对于SHA-256来说,是64位。 512 - 64 = 448.

    
    1
  • 于途
    2020-12-01
    老师,针对退役的算法、遗留的算法、现行的算法,能否整理一个概览图或者表格呢?

    作者回复: 每一个类别的算法,都会有整理。另外,专栏结课的时候会有一个总的表格。

    
    1
  • 一步
    2020-11-30
    在下图 SHA-1 和 SHA-2 的数据补齐方案里,输入数据长度是补充数据的一部分 ————————- 这里没有理解,输入数据长度是64位或者是128怎么进行补齐的?

    作者回复: 我特别喜欢这样的问题,这就是我在开篇词里说的发现新问题。你在学习群里找一下我的微信号,如果有需要,我可以送你一门极客时间的其他课程,或者我自己的《代码精进之路》。 SHA-1和SHA-2的算法设计,如果输入数据长度是数据块的整数倍,就用补齐数据再补一个数据块。

    共 9 条评论
    1
  • 向东是大海
    2020-11-30
    MD5,SHA-1 是退役的算法吧?另外,循环冗余校验CRC16,CRC32是哈希算法吗,还可以在新项目中使用吗?

    作者回复: MD5是退役的算法了。SHA-1也很危险了,但是由于SHA-1算法应用太广泛,还有很多遗留系统在使用。现在主流的浏览器,还有密码算法类库(包括Java),已经把SHA-1禁止掉了(特别是数字签名)。 CRC16,CRC32不是单向散列函数,不属于密码学的算法,一般也不会当中密码学算法来使用。

    
    1
  • 天天有吃的
    2020-12-01
    补齐数据那张图不是很明白,423、871、24这三个数字是什么意思;还有64、128是指二进制有64、128位吗

    作者回复: 好问题! 前面的abc使用的是位,64和128指的也是位。24表示输入数据长度,423位表示除了表示数据长度的位数,以及数据补齐开始的标识位外,还需要的补齐数据。 我在另外一个回复里,拆解了423位是怎么来的。你找找看?

    共 2 条评论
    
  • 孜孜
    2020-11-30
    我唯一能想到的是,我们前几个月,disable了http server的tls1.0和1.1。但是遗憾的是tls1.2有些密码套件的签名还是sha1。

    作者回复: TLS的签名套件里的SHA-1指的是HMAC算法。基于SHA-1的HMAC算法,虽然目前已经不推荐使用了,但是它的安全性目前看还是足够的。我们后面还会讲HMAC。我个人建议HTTP server禁止掉使用SHA-1的密码套件。如果禁止掉TLS 1.0/1.1没有兼容性问题,禁止掉使用SHA-1的密码套件,一般的应该也没什么问题。

    
    