自然溢出哈希 hack 方法
今天不知道在什么地方看到这个东西,感觉挺有意思的,故作文以记之(
当 \(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 方法的更多相关文章
- 【gym102394L】LRU Algorithm(自然溢出哈希)
题意:给定一个n个数的数字序列,第i个数为a[i],每次操作会将a[i]插入或移到最前端: 1.若a[i]已经在序列中出现过,则将其移到最前端,并删除原出现位置 2.若a[i]未出现过,则直接将其插入 ...
- 关于如何让写自然溢出hash的无辜孩子见祖宗这件事
关于如何让写自然溢出hash的无辜孩子见祖宗这件事 来源博客 这几天考试连着好几次被卡hash卡到死. 我谔谔,为什么连hash都要卡. 码力弱鸡什么时候才能站起来. 只需要任意两种字符,比如噫呜呜噫 ...
- 图像相似度计算之哈希值方法OpenCV实现
http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...
- css中使用if条件在各大浏览器(IE6\IE7\IE8)中hack方法解决教程
一个滚动代码,其他浏览器都滚的好好的,就IE出现错误,DIV+CSS if条件hack,这里DIVCSS5为大家介绍针对各大浏览器(IE6\IE7\IE8)中使用if条件hack方法教程,DIV CS ...
- jvm内存溢出问题的定位方法
jvm内存溢出问题的定位方法 今天给大家带来JVM体验之内存溢出问题的定位方法. 废话不多说直接开始: 一.Java堆溢出 测试代码如下: import java.util.*; public cla ...
- Safari的CSS HACK方法
以前的文章里提到过IE6/IE7/IE8/IE9/.Firefox的CSS HACK方法,那么Safari的CSS HACK是什么呢? 请看以下CSS代码: .box { color: black ...
- Java虚拟机系列(三)---内存溢出情况及解决方法
因为Java虚拟机内存有堆内存.方法区.虚拟机栈.本地方法栈和程序计数器五部分组成,其中程序计数器是唯一一块不会发生内存溢出异常的内存区,所以只有四类内存区可能发生内存溢出异常,其中虚拟机栈和本地方法 ...
- arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法
最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)——红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境 ...
- android加载大量图片内存溢出的三种方法
android加载大量图片内存溢出的三种解决办法 方法一: 在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @para ...
随机推荐
- 小白自制Linux开发板 七. USB驱动配置
本文章基于https://whycan.com/t_3087.htmlhttps://whycan.com/t_6021.html整理 F1c100s芯片支持USB的OTG模式,也就是可以通过更改Us ...
- 使用logstash的grok插件解析springboot日志
使用logstash的grok插件解析springboot日志 一.背景 二.解决思路 三.前置知识 四.实现步骤 1.准备测试数据 2.编写`grok`表达式 3.编写 logstash pipel ...
- activiti流程图上获取各节点的信息获取
背景: 由于项目的需要,当用户在查看流程图时,当点击某个流程图片上的节点时,需要提示一些信息,这就需要获取各个节点的信息,此处获取id和name的值. 注意:这个并 ...
- FastAPI 学习之路(五十六)将token存放在redis
在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,Fa ...
- 热身训练1 Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=6 分析: 这道题,全都是1e9,所以我们很容易想到"矩阵快速幂". 假如说我们没有后面那个&q ...
- Manacher(马拉车)
Able was I ere I saw Elba. ----Napoléon Bonaparte(拿破仑) 一.回文串&回文子串 这个很好理解. 如果一个字符串正着读和反着读是一 ...
- Linkerd 2:5 分种厘清 Service Mesh 相关术语
API Gateway(API 网关) API gateway 位于应用程序的前面,旨在解决身份验证和授权.速率限制以及为外部消费者提供公共访问点等业务问题. 相比之下,service mesh 专注 ...
- sql 多表联合查询更新
sqlserver: update A a set a.i = b.k from B b where a.key = b.key oracle : update A a set a.i = (sele ...
- When overwhelmed, take a break
When overwhelmed by, frustrated with, or tired of the work, taking a break will help with thinking a ...
- Django settings.py设置 DEBUG=False后静态文件无法加载解决
解决办法: settings.py 文件 DEBUG = False STATIC_ROOT = os.path.join(BASE_DIR,'static') #新增 urls.py文件(项目的) ...