c++ - 算法识别字符串匹配散列和无误报

标签 c++ string algorithm hash

我需要查找给定字符串是否与列表中的字符串匹配,但列表中没有字符串;基本上我需要散列字符串并只匹配散列列表。问题是要确保没有误报,这样只会找到完全匹配的字符,而不会找到任何其他字符集。这对于实际的字符串列表当然很容易,即使是简单的二进制搜索也可以,但我想要一种算法,它可以在没有实际字符存在的情况下工作(即预先计算)。布隆过滤器不能保证某些任意字符集可能不匹配。

更新:这类似于仅存储密码哈希,然后对输入的密码进行哈希处理,然后将其与哈希列表进行比较,以查看该密码是否是其中之一(不可否认,这不是通常使用的密码)。此要求的原因是不必传送实际文本,只需传送哈希值即可。

更新 2:如果没有完美的哈希函数,还有另一种方法可以做到这一点吗?我有成千上万的条目,很难找到一个完美的哈希值。也许像布隆过滤器但有更好的保证?

最佳答案

一个好的加密散列函数(有足够的位)将使错误匹配的概率极小;足够小以至于暴力攻击基本上是不可能的。大多数安全系统认为这样的机制就足够了。

如果您想要绝对保证不会出现误报,那么您实际上需要包含足够的数据来验证输入;不能比目标字符串短(但不必比目标字符串大)。实际上,您需要加密目标字符串。由于加密 key 和加密字符串都是可见的,为了避免有人简单地解密您需要使用的加密字符串 asymmetric cipher .这些计算量很大,但这对您的环境来说可能不是问题。

关于c++ - 算法识别字符串匹配散列和无误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006472/

相关文章:

Python - 如果字符串列表不在字典键中,则从字典列表中删除字典

java - 从数组中删除重复字符

c++ - 警告 : '0' flag used with '%p' gnu_printf format

c++ - 将具有多个值的 XML 属性加载到不同的表格单元格

c++ - 如何对字符串数组的每个字符串进行排序

javascript - 如何在 javascript 中通过特殊字符分割字符串\

c# - 将 Pascal Case 转换为句子的最佳方法

javascript - 找出所有字符串的公共(public)部分

algorithm - 多重赋值/矩阵最大化

c++ - 如何在 Windows 中获取指向硬件驱动程序的指针?