zoukankan      html  css  js  c++  java
  • [php代码审计] 哈希长度拓展攻击

    已知:

    1、 salt的长度。

    2、 message==“adminadmin”。

    3、 MD5(salt+message)的值。

    求:      

    MD5(salt+message+填充数据+任意字符串)的值。

    解:

     设salt = “1234567890abcdef”;则salt+message==“1234567890abcdefadminadmin”;如下图:

     

    字符串“1234567890abcdefadminadmin”的总共26字节( 26字节 * 8bit/字节 = 208bit)。26%64!=56,则进行补位,第一步补到长度为56字节。hex(80)加若干hex(00)直到56字节长度。如图:

     

    然后在其后添加8个字节的长度描述符(原始字符串的位长度)。26字节 * 8bit/字节=208bit=0xd0。如图:

     

     

    MD5计算时,将补位后的数据进行分组,每组64字节。然后使用初始registers值和第一个分组作为输入,进行“复杂的数学变换”,生成registers,如果只有一组,那么组产生的registers稍微变换就是该字符串最终的哈希值。否则第一组产生的resigters会加入到下一分组的计算,直至分组全部计算完成,最终产生的registers稍微变换就是该字符串最终的哈希值。

    我们知道了MD5(salt+message)的哈希值就能推出在计算(salt+message)的哈希时最终产生的registers,那么MD5(salt+message+填充数据+任意数据)会进行如下操作:

    分组一:salt+message+填充数据。

    分组一的registers我们已知(因为该分组的哈希值已知)。

    分组二:任意数据+填充数据二。

    该分组计算时的registers和分组数据(任意数据+填充数据二)都是已知的,那么我们就能计算出该分组的哈希值(也就是“salt+message+填充数据+任意数据“的哈希值)。

  • 相关阅读:
    性能测试流程
    性能测试关注的指标
    什么样的系统需要做性能测试
    python数据类型-列表
    python-数据类型-元组
    python自动化第二课
    python自动化第二课
    内存泄漏和内存溢出
    程序中必须知道的几种命名规范
    超级详细安装jmeter的教程(亲测)
  • 原文地址:https://www.cnblogs.com/natian-ws/p/7249350.html
Copyright © 2011-2022 走看看