mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-05 11:41:22 +08:00
deploy
This commit is contained in:
@@ -1797,7 +1797,7 @@
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
8.3 Top-K 问题
|
||||
8.3 Top-k 问题
|
||||
</span>
|
||||
|
||||
|
||||
@@ -4104,7 +4104,7 @@
|
||||
<p>总而言之,我们通常选取质数作为模数,并且这个质数最好足够大,以尽可能消除周期性模式,提升哈希算法的稳健性。</p>
|
||||
<h2 id="633">6.3.3 常见哈希算法<a class="headerlink" href="#633" title="Permanent link">¶</a></h2>
|
||||
<p>不难发现,以上介绍的简单哈希算法都比较“脆弱”,远远没有达到哈希算法的设计目标。例如,由于加法和异或满足交换律,因此加法哈希和异或哈希无法区分内容相同但顺序不同的字符串,这可能会加剧哈希冲突,并引起一些安全问题。</p>
|
||||
<p>在实际中,我们通常会用一些标准哈希算法,例如 MD5、SHA-1、SHA-2、SHA-3 等。它们可以将任意长度的输入数据映射到恒定长度的哈希值。</p>
|
||||
<p>在实际中,我们通常会用一些标准哈希算法,例如 MD5、SHA-1、SHA-2 和 SHA-3 等。它们可以将任意长度的输入数据映射到恒定长度的哈希值。</p>
|
||||
<p>近一个世纪以来,哈希算法处在不断升级与优化的过程中。一部分研究人员努力提升哈希算法的性能,另一部分研究人员和黑客则致力于寻找哈希算法的安全性问题。表 6-2 展示了在实际应用中常见的哈希算法。</p>
|
||||
<ul>
|
||||
<li>MD5 和 SHA-1 已多次被成功攻击,因此它们被各类安全应用弃用。</li>
|
||||
@@ -4134,10 +4134,10 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>输出长度</td>
|
||||
<td>128 bits</td>
|
||||
<td>160 bits</td>
|
||||
<td>256/512 bits</td>
|
||||
<td>224/256/384/512 bits</td>
|
||||
<td>128 bit</td>
|
||||
<td>160 bit</td>
|
||||
<td>256/512 bit</td>
|
||||
<td>224/256/384/512 bit</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>哈希冲突</td>
|
||||
@@ -4394,7 +4394,7 @@
|
||||
</div>
|
||||
<p>在许多编程语言中,<strong>只有不可变对象才可作为哈希表的 <code>key</code></strong> 。假如我们将列表(动态数组)作为 <code>key</code> ,当列表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 <code>value</code> 了。</p>
|
||||
<p>虽然自定义对象(比如链表节点)的成员变量是可变的,但它是可哈希的。<strong>这是因为对象的哈希值通常是基于内存地址生成的</strong>,即使对象的内容发生了变化,但它的内存地址不变,哈希值仍然是不变的。</p>
|
||||
<p>细心的你可能发现在不同控制台中运行程序时,输出的哈希值是不同的。<strong>这是因为 Python 解释器在每次启动时,都会为字符串哈希函数加入一个随机的盐(Salt)值</strong>。这种做法可以有效防止 HashDoS 攻击,提升哈希算法的安全性。</p>
|
||||
<p>细心的你可能发现在不同控制台中运行程序时,输出的哈希值是不同的。<strong>这是因为 Python 解释器在每次启动时,都会为字符串哈希函数加入一个随机的盐(salt)值</strong>。这种做法可以有效防止 HashDoS 攻击,提升哈希算法的安全性。</p>
|
||||
|
||||
<!-- Source file information -->
|
||||
|
||||
|
||||
Reference in New Issue
Block a user