std::string_view编译时哈希
std::string_view compile time hashing
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
。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 使用Qt C++计算类似Git的SHA1哈希
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- c++找不到具有相同哈希的无序集合元素
- 解决由于在哈希函数中使用了不完整的类型而导致的编译失败
- 用于对编译时字符串进行哈希处理的延迟指针
- 简单的 C++11 哈希函数无法编译
- 是否可以将哈希值作为编译时常数
- 使用constexpr编译时间哈希
- 编译哈希算法时出现内存访问冲突错误
- std::string_view编译时哈希
- 编译时哈希C++0x
- 编译字符类型的时一致性哈希
- Qt 在编译时生成包含 Git 哈希的头文件,并使用文件强制重建
- 将 Qt 中的 Git 哈希打印为编译时创建的宏
- c++:stl哈希编译问题
- 在C++中真正编译时字符串哈希
- 为什么这个哈希表函数显示编译错误