为什么 Data.HashTable 使用带盐的哈希(来自 Data.Hashable)?

2023-12-27

我不懂为什么Data.HashTable正在使用Data.Hashable, 其中有hashWithSalt作为(唯一/基本)方法。

这不符合计算一次哈希值并将其存储在对象中的自然优化(自然,因为 Haskell 对象是不可变的)。

如果我想使用HashTables这样,我就被迫实施hashWithSalt。 (从 1.2.0.* 到 1.2.1.*,重新引入了 hashablehash作为类方法,但这没有帮助?)

实际的表实现似乎没有利用hashWithSalt (HashTable.ST.Linear一点也不,HashTable.ST.Cuckoo仅使用两种固定盐)。


正如卡尔在评论中指出的那样,转向hashWithSalt方法超过刚刚hash(如原Hashable使用)是为了允许人们减轻基于哈希冲突的 DOS 攻击。在一段时间内,每次运行都会生成不同的随机默认盐,甚至使用unsafePerformIO在后台。然而,对于对以下问题感兴趣的人来说,缺乏可重复性是一个巨大的问题。跨运行持久保存数据结构,获取可靠的基准测试数据等。

因此,当前的方法是提供方法,但倾向于遵循固定的默认盐,然后在文档中添加警告,表明如果以面向公众的方式使用,这仍然容易受到各种潜在的 DOS 攻击向量的影响。 (您可以在此处的文档中亲自查看:http://hackage.haskell.org/package/hashable-1.2.1.0/docs/Data-Hashable.html http://hackage.haskell.org/package/hashable-1.2.1.0/docs/Data-Hashable.html)

Because hash是它自己的类方法,很容易实现一个带有“无盐”哈希的对象,并用它来记录,此外,您可以实现hashWithSalt就这样xor如果你愿意的话可以加盐。或者,正如评论所述,您可以实施hashWithSalt通过更合法的方法hashing你生成/记忆的hash.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Data.HashTable 使用带盐的哈希(来自 Data.Hashable)? 的相关文章

  • 如何使用 Haskell 中的 thyme 库从 Int 值创建 UTCTime?

    我有年 月 日 小时和分钟值 所有这些都是类型Int 我怎样才能将它们转换为UTCTime or UniversalTime 需要导入以下内容 import Control Lens import Data Thyme Clock impo
  • 生成所有可能的树

    给定以下数据类型定义 data FormTree Empty Node FormTree FormTree deriving Show 我想编写一个函数 它生成一个无限列表 其中包含按长度排序的所有可能的树 例如节点数量 下面的代码几乎满足
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • ErrorT 已弃用,但 exceptT 不适合

    我有一个一元计算 在某些时候 由于单子模式匹配 它开始需要 MonadFail 约束 我的简单解决方法是使用以下命令运行它 fmap either error id runErrorT 然而哎呀 Deprecated Use Control
  • 如何让 Show 显示函数名称?

    作为一个让我熟悉 Haskell 的简单练习 在 Youtube 上闲逛并偶然进入美国倒计时游戏节目之后 我想为数字游戏制作一个求解器 你得到 6 个数字 需要将它们与 为了得到给定的结果 到目前为止我所得到的是非常脑死亡的 let ope
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • 持久 selectList 导致错误“无法将类型‘BaseBackend backend0’与‘SqlBackend’匹配”

    我遇到以下编译错误 Couldn t match type BaseBackend backend0 with SqlBackend arising from a use of runSqlite The type variable bac
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • Haskell:是的,没有类型类。为什么是整数?

    我有一个关于 GHCi 如何假定整数类型的问题 我正在阅读 Learn you a Haskell 是 否类型的课程 如果您想阅读全文 这里有一个链接 http learnyouahaskell com making our own typ
  • Haskell - 用防护罩替换外壳

    我想知道在这部分代码中是否可以用守卫替换 case 语句 firstFunction String gt Maybe MyType secondFunction MyType gt Integer myFunction String gt
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • 如何在 Haskell 中制作打勾游戏的图案?

    实现有 2 个参数的函数 ticktick 第一个参数是自然数元组 定义游戏场地的行数和列数 第二个列表包含由玩家 x 和玩家 o 轮流玩的坐标给出的井字游戏比赛的记录 打印游戏的实际状态 其中游戏区域将由字符 和 界定 空方块 以及字符
  • : 中缀运算符在 Haskell 中的作用是什么?

    我正在阅读Haskell 简要介绍 http www haskell org tutorial index html 这不是那么温和 并且它反复使用 操作符而不直接解释它的作用 那么 它到底有什么作用呢 是 前置 运算符 x xs 返回一个
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • ST monad 是如何工作的?

    我知道 ST monad 有点像 IO 的弟弟 而 IO 又是添加了状态 monadRealWorld魔法 我可以想象状态 也可以想象 RealWorld 以某种方式放入 IO 中 但每次我写一个类型签名ST the sST monad 的
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 类型级别集结合律的证明

    我试图证明类型级函数Union https hackage haskell org package type level sets 0 8 5 0 docs Data Type Set html t Union是关联的 但我不确定应该如何完
  • 关于“没有绑定的类型签名”的错误

    我在 Haskell 中遇到 ASCII 问题 fromEnum Char gt Int toEnum Int gt Char offset Int offset fromEnum A fromEnum a toUpper Char gt

随机推荐

  • Eclipse Java 错误:无法启动此选择并且最近没有启动

    我在互联网上到处查看并尝试了论坛所说的所有操作 但没有任何效果 这个错误不断出现 我尝试运行我的java项目 不适用于android 即使下拉运行按钮也不起作用 因为它说 不适用 Eclipse 需要查看项目源文件之一中的 main 方法
  • PHP - 保护代码[重复]

    这个问题在这里已经有答案了 可能的重复 如何保护您的软件代码 https stackoverflow com questions 2368064 how to protect your software code 保护我的 PHP 应用程序
  • 正则表达式替换第二次出现的字符

    我有一些以下格式的数据 MM SS 嗯 where MM is minutes ss is seconds and mmm is 3 digit milliseconds like 05 23 236 我试图用点替换第二次出现的冒号 05
  • $this是什么意思

    我见过一些脚本包含 this在具有 OOP 的 PHP 脚本中 我从来不知道它的含义 就像 this gt refresh 也许向我解释一下什么 this指的是 但我确实知道你不能将它用作动态变量 例如 this is a variable
  • 如何像 ps -e 一样显示进程

    Hello 我想制作一个简单的 C 程序 就像 ps i 一样工作 唯一应显示的列是 PID 和 CMD 那是我的代码 include
  • 常见的 SIMD 技术

    在哪里可以找到有关常见 SIMD 技巧的信息 我有一个指令集 并且知道如何编写不复杂的 SIMD 代码 但我知道 SIMD 现在更加强大 它可以容纳复杂的条件无分支代码 例如 ARMv6 以下指令序列将 Rd 的每个字节设置为 Ra 和 R
  • Docker 退出,状态码 139

    我有一个 Net Core 应用程序 它可以在 Docker 映像上运行 我在命令行中输入 docker run d net bridge it name testapp v var test var test microsoft aspn
  • Selenium Webdriver + python - 鼠标悬停后无法隐藏工具提示

    我正在使用 Selenium WebDriver 和 Firefox 在我的网页上测试工具提示 我试图将鼠标悬停在附加工具提示的元素上 测试工具提示是否显示 然后将鼠标悬停在另一个元素上并测试其各自的工具提示 element to clic
  • Angularjs $http 在 GET 上期望 JSON 结果时出现“XML 解析错误:找不到元素位置”错误

    当我提交一个角js httpGET 调用我收到 XML 解析错误 http调用代码片段是 http method GET url myapp api items itemId 错误是 XML Parsing Error no element
  • PySpark:如何根据多个条件附加其他 pyspark 数据帧中的新列?

    我有 pyspark df1 id name email age college 12 Sta email protected cdn cgi l email protection 25 clg1 21 Danny email protec
  • MVC 6 中多个网站的通用 wwwroot 文件夹

    我有多个网站使用 wwwroot assets文件夹 html 主题 css 和 javascript 文件 来加载静态内容 目前我正在复制assets每个站点中的文件夹 我的所有项目都位于一个公共父目录下 我不想复制 wwwroot as
  • 基于 Codeigniter 数据库的配置设置

    我正在使用最新版本的 Codeigniter 2 0 构建一个应用程序 我想你可能会说 我的应用程序是动态的 有点像自定义 CMS 我有一个名为 设置 的数据库表 其中包含以下字段 id name value 基本上我当前正在做的是使用辅助
  • 将 C char[][] 数组封送至 C#

    我已经看了又看并尝试了我能想到的或找到的建议 我仍然没有运气获得我需要的数据 我正在使用第三方 DLL 我相信它是用 C 编写的 我需要用 C 访问此 DLL 中的函数 在大多数情况下 除了一项功能外 我都可以使用此功能 我遇到问题的函数具
  • 防止用户停止进程

    长话短说 我需要创建一个应用程序来监视计算机上的音量 无论如何 计算机用户都不能停止该应用程序 我需要让我的应用程序在计算机启动时启动 这样用户就不能在应用程序不运行的情况下重新启动它来进入会话 到目前为止 我还不知道该怎么做 但通过一些研
  • Netbeans 中 SQLite 的 JDBC:找不到合适的驱动程序

    我需要将 SQLite 文件中的数据加载到我在 Netbeans 中开发的 java 程序中 该文件将通过摆动菜单项加载 我在用着SQLitejdbc https bitbucket org xerial sqlite jdbc downl
  • 如何查看应用程序发布版本的 Flutter 调试控制台输出?

    使用 print 记录消息在调试模式下工作 我可以在 VSCode 的调试控制台或终端中看到输出 我怎样才能获得那些发布版本 我已经看到发布版本生成了此类日志 但不知道如何获取这些日志 Run flutter logs 在 flutter
  • 删除 SQL Server Management Studio 中记住的登录名和密码列表

    我最近在修理我的笔记本电脑时使用了我们公司的备用笔记本电脑 已设置普通用户 登录数据库时 我在 SQL Server Management Studio 中选中了 记住密码 选项 我需要清除我所使用的登录名和密码信息 以防止下一个使用笔记本
  • 如何使用 golang 检查 s3 对象大小

    我已经实现了一个从 AWS S3 存储桶下载对象的功能 这很好用 但我需要显示下载进度条 为此 我需要根据以下公式事先知道对象的大小here https github com cheggaaa pb 有谁知道如何获取对象的大小 这是我的代码
  • JTextArea Shift + Enter 换行

    我已向 JTextArea 字段添加了一个按键侦听器 但它的行为并不符合我的预期 inputTextArea addKeyListener new KeyAdapter public void keyPressed KeyEvent k I
  • 为什么 Data.HashTable 使用带盐的哈希(来自 Data.Hashable)?

    我不懂为什么Data HashTable正在使用Data Hashable 其中有hashWithSalt作为 唯一 基本 方法 这不符合计算一次哈希值并将其存储在对象中的自然优化 自然 因为 Haskell 对象是不可变的 如果我想使用H