std::string_view编译时哈希

std::string_view compile time hashing

本文关键字:哈希 编译 string std view      更新时间:2023-10-16

C++17字符串视图的std::hash函数似乎不是constexpr函数。

在我看来,绑定到const-char[]的字符串视图可以在编译时进行哈希处理(这将非常美妙),或者有什么可以防止这种情况发生吗?

由于C++14(见17.6.3.4哈希要求,表26),我们有:

返回的值应仅取决于持续时间内的参数k程序的。[注:因此,表达式h(k)的所有求值对于给定的程序。--尾注]

两个不同的执行可以给出不同的哈希:

哈希函数只需要为程序的单个执行内的相同输入;这允许防止冲突DoS攻击的salted散列

此行为有助于减轻基于哈希冲突的DoS攻击。

详细信息

以下是关于C++17标准中Hash概念要求的措辞:

返回的值应仅取决于参数k在程序的持续时间内。[注:因此表达式h(k)的求值k的值与给定的程序执行。——尾注]

它没有明确说明任何关于随机哈希的内容。std::hash文本不强制也不排除随机散列。

历史

以下是N3242 2011-02-28草案,其中没有提到"在项目期间":

不应抛出异常。返回的值应仅取决于关于自变量k。[注意:因此表达式h(k)的所有求值k的值相同,得到相同的结果尾钞

我们可以看到;在节目的持续时间内"对于程序"的给定执行;被添加为";2291.std::hash易受冲突DoS攻击";。

在实践中

AFAIU,没有std::hash的实现实现随机哈希,但您可以编写自己的my::secure_hash