今天不知道在什么地方看到这个东西,感觉挺有意思的,故作文以记之(

当 \(base\) 为偶数时,随便造一个长度 \(>64\) 的字符串,只要它们后 \(64\) 位相同那么俩字符串的哈希值就相同,直接就卡掉了。

当 \(base\) 为奇数时,对于一个只有 \(\text{a}\) 和 \(\text{b}\) 组成的字符串 \(s\),我们定义 \(\bar{s}\) 为将 \(s\) 中所有 \(\text{a}\) 变为 \(\text{b}\),\(\text{b}\) 变为 \(\text{a}\) 的结果,然后我们构造 \(s_1="\text{a}",s_i=s_{i-1}+\overline{s_{i-1}}\),再定义 \(\text{hash}(s)\) 为字符串 \(s\) 的哈希值。那么显然有 \(\text{hash}(s_i)=\text{hash}(s_{i-1})\times base^{2^{i-2}}+\text{hash}(\overline{s_{i-1}}),\text{hash}(\overline{s_i})=\text{hash}(\overline{s_{i-1}})\times base^{2^{i-2}}+\text{hash}(s_{i-1})\),二者相减发现刚好可以表示为 \(\text{hash}(s_i)-\text{hash}(\overline{s_i})\) 的形式。于是我们记一个 \(f_i=\text{hash}(s_i)-\text{hash}(\overline{s_i})\),那么 \(f_i=f_{i-1}\times(base^{2^{i-2}}-1)\),而 \(base^{2^{x}}-1=(base^{2^{x-1}}+1)(base^{2^{x-2}}+1)\cdots(base+1)(base-1)\),由 \(2\nmid base\) 知这 \(x\) 个括号里的东西全是偶数,故 \(2^{x+1}\mid base^{2^x}-1\),于是 \(2^{i(i-1)/2}\mid f_i\),故对于 \(i\ge 12\),\(\text{hash}(s_i)=\text{hash}(\overline{s_i})\),构造一个长度 \(4096\) 的字符串即可叉掉。

这个故事告诉我们,以后千万不要写自然溢出哈希了

自然溢出哈希 hack 方法的更多相关文章

  1. 【gym102394L】LRU Algorithm(自然溢出哈希)

    题意:给定一个n个数的数字序列,第i个数为a[i],每次操作会将a[i]插入或移到最前端: 1.若a[i]已经在序列中出现过,则将其移到最前端,并删除原出现位置 2.若a[i]未出现过,则直接将其插入 ...

  2. 关于如何让写自然溢出hash的无辜孩子见祖宗这件事

    关于如何让写自然溢出hash的无辜孩子见祖宗这件事 来源博客 这几天考试连着好几次被卡hash卡到死. 我谔谔,为什么连hash都要卡. 码力弱鸡什么时候才能站起来. 只需要任意两种字符,比如噫呜呜噫 ...

  3. 图像相似度计算之哈希值方法OpenCV实现

    http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...

  4. css中使用if条件在各大浏览器(IE6\IE7\IE8)中hack方法解决教程

    一个滚动代码,其他浏览器都滚的好好的,就IE出现错误,DIV+CSS if条件hack,这里DIVCSS5为大家介绍针对各大浏览器(IE6\IE7\IE8)中使用if条件hack方法教程,DIV CS ...

  5. jvm内存溢出问题的定位方法

    jvm内存溢出问题的定位方法 今天给大家带来JVM体验之内存溢出问题的定位方法. 废话不多说直接开始: 一.Java堆溢出 测试代码如下: import java.util.*; public cla ...

  6. Safari的CSS HACK方法

    以前的文章里提到过IE6/IE7/IE8/IE9/.Firefox的CSS HACK方法,那么Safari的CSS HACK是什么呢?   请看以下CSS代码: .box { color: black ...

  7. Java虚拟机系列(三)---内存溢出情况及解决方法

    因为Java虚拟机内存有堆内存.方法区.虚拟机栈.本地方法栈和程序计数器五部分组成,其中程序计数器是唯一一块不会发生内存溢出异常的内存区,所以只有四类内存区可能发生内存溢出异常,其中虚拟机栈和本地方法 ...

  8. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法

    最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)——红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境 ...

  9. android加载大量图片内存溢出的三种方法

    android加载大量图片内存溢出的三种解决办法 方法一:  在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @para ...

随机推荐

  1. ByteCTF2021 double sqli

    double sqli easy sqli http://39.105.175.150:30001/?id=1 http://39.105.116.246:30001/?id=1 http://39. ...

  2. Python设置Excel样式

    前面已经详细讲解过使用Python对Excel表格进行读.写操作,本文主要讲解下使用Python设置Excel表格的样式. 深入学习请参考openpyxl官方文档: https://openpyxl. ...

  3. 剑指offer:JZ9 用两个栈实现队列

    JZ9 用两个栈实现队列 描述 用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保 ...

  4. CSP-S 2021 遗言

    感谢€€£,谢谢宁嘞! 第一题,€€£给了很多限制条件,什么"先到先得"."只有一个跑道",让它看起来很好做,然后来骗,来偷袭,广大"消费者" ...

  5. 从0到1搭建自己的组件(vue-code-view)库(上)

    0x00 前言 本文将从结构.功能等方面讲解下项目 vue-code-view 的搭建过程,您可以了解以下内容: 使用 vue cli 4从0搭建一个组件库及细致配置信息. 项目的多环境构建配置. 项 ...

  6. Zabbix webhook 自定义报警媒介

    场景一:使用企业微信机器人报警 图中的token是:在群组中添加机器人,机器人的webhook地址的key var Wechat = { token: null, to: null, message: ...

  7. Vue&Element开发框架中增加工作流处理,查看申请单中整合多个处理类型的处理

    关于我在Winform框架.混合框架.Bootstrap开发框架中的简易审批性工作流模块,我写过不少文章,有兴趣可以参考<工作流模块>的随笔进行了解,本篇随笔在完成了Vue&Ele ...

  8. IP基础 & 子网划分 & 路由寻址

    IP地址详解 IP地址概念 就像用身份证号码来区别毎个人一样,为了区别 网上的每台计算机,我们给因特网上的每一台计算机一个唯一的编号 ,我们把它称为IP地址 IP地址就是一个唯一标识 ,是一段网络编码 ...

  9. Bootstrap-2栅格系统

    栅格系统(使用最新版本bootstrap) Grid options(网格配置) Responsive classes(响应式class) Gutters(间距) Alignment(对齐方式) Re ...

  10. JAVA POI导出EXCEL 动态表头、多级表头、动态数据

    导出Excel文件是业务中经常遇到的需求,以下是经常遇到的一些问题: 1,导出中文文件名乱码 String filename = "sheet1";response.setChar ...