作家
登录

PHP哈希表碰撞攻击原理

作者: 来源: 2017-06-01 13:32:16 阅读 我要评论

  •    uint i = 3; 
  •    Bucket **tmp; 
  •  
  •    SET_INCONSISTENT(HT_OK); 
  •  
  •    //长度向2的┞符数次幂圆整 
  •    if (nSize >= 0x80000000) { 
  •        /* prevent overflow */ 
  •        ht->nTableSize = 0x80000000; 
  •    } else { 
  •        while ((1U << i) < nSize) { 
  •            i++; 
  •        } 
  •        ht->nTableSize = 1 << i; 
  •    } 
  •  
  •    ht->nTableMask = ht->nTableSize - 1; 
  •  
  •    /*此处省略若干代码…*/ 
  •  
  •    return SUCCESS; 
  •  
  •  
  • 即简单将数据的原始key与HashTable的nTableMask进行按位与即可。

    下面是Zend源码中查找哈希表的代码:

    个中zend_hash_index_find用于查找整数key的情况,zend_hash_find用于查找字符串key。逻辑根本一致,只是字符串key会经由过程zend_inline_hash_func转为整数key,zend_inline_hash_func封装了times33算法,具体代码就不贴出了。

    进击

    根本进击

    知道了PHP内部哈希表的算法,就可以应用其道理构造用于进击的数据。一种最简单的办法是应悠揭捉?码规律制造碰撞。上文提到Zend HashTable的长度nTableSize会被圆整为2的┞符数次幂,假设我们结垢荷琐2^16的哈希表,则nTableSize的二进制表示为:1 0000 0000 0000 0000,而nTableMask = nTableSize – 1为:0 1111 1111 1111 1111。接下来,可以以0为初始值,以2^16为步长,制造足够多的数据,可以获得如下推想:

    0000 0000 0000 0000 0000 & 0 1111 1111 1111 1111 = 0

    0001 0000 0000 0000 0000 & 0 1111 1111 1111 1111 = 0

    0010 0000 0000 0000 0000 & 0 1111 1111 1111 1111 = 0

    0011 0000 0000 0000 0000 & 0 1111 1111 1111 1111 = 0

    0100 0000 0000 0000 0000 & 0 1111 1111 1111 1111 = 0

    ……

    概况来说只要包管后16位均为0,则与掩码位于后获得的哈希值全部碰撞在地位0。

    下面是应用这个道理写的一段进击代码:

    1. <?php 
    2.  
    3. $size = pow(2, 16); 
    4.  
    5. $startTime = microtime(true); 
    6.  
    7. $array = array(); 
    8. for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) { 
    9.    $array[$key] = 0; 
    10.  
    11. $endTime = microtime(true); 
    12.  
    13. echo $endTime - $startTime, ' seconds'"\n" 

    这段代码在我的VPS上(单CPU,512M内存)上用了近88秒才完成,并且在此时代CPU资本几乎被用尽:


      推荐阅读

      在服务器应用虚拟化中发现价值

    一些IT专业人员可以看到大年夜办事器操作体系抽象应用法度榜样的潜力。如今,这项技巧方才起步。在办事器虚拟>>>详细阅读


    本文标题:PHP哈希表碰撞攻击原理

    地址:http://www.17bianji.com/lsqh/35521.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)