当前位置: 首页 > 知识库问答 >
问题:

关于值长度的知识会影响哈希完整性吗

衡翰藻
2023-03-14

如果我在数据库中存储一个散列值,但被散列的原始值的长度是固定的(例如,总是4个字符),这会影响散列函数的单向性吗?

更准确地说,我有敏感字符串,然后加密并存储在数据库中。为了搜索这些字符串,我不想解密数据库中的每个条目,所以我还将字符串前4个字符的散列存储在另一列中。当我想搜索数据库时,我会生成搜索词的前4个字符的散列,并将其与存储的散列进行比较,以找到匹配或可以匹配的条目,然后解密这些条目以检查冲突,并获得与该条目相关的其余数据。

我担心的是,由于攻击者知道被散列的字符串的长度是恒定的(4个字符),他/她只需要生成一个包含所有可能的4个字母字符串及其散列的表,并查找存储在我的数据库中的散列值(从而泄露原始敏感字符串的前4个字符)。

共有2个答案

钱欣悦
2023-03-14

根据您想要执行的搜索类型,您可以使用以下几个选项来改进方案:

>

搜索部分字符串:通过使用键控哈希而不是简单的哈希来更改方案。

能远
2023-03-14

你的结论基本正确。如果攻击者知道您的哈希是4个字符的字符串,那么通过蛮力查找纯文本是非常简单的。除了让攻击者知道敏感数据的前4个字符外,它还可以让他们知道您用于加密数据的部分密钥(在简单级别上,加密是密钥XOR明文,即明文XOR encrypted=key)。虽然利用这些信息破坏其余的加密将是一个挑战,但加密攻击建立在较少的基础上。

 类似资料:
  • 问题内容: 例如,我喜欢在Redis中使用冗长的名称。 这样可以吗?还是会影响性能? 问题答案: 您正在谈论使用的密钥并没有那么长。 您提供的示例键用于一个集合,集合查找方法为O(1)。集合(SDIFF,SUNION,SINTER)上更复杂的操作是O(N)。可能的是,与使用较长的键相比,填充是更昂贵的操作。 Redis带有一个称为的基准实用程序,如果您修改src / redis-benchmark

  • 问题内容: 我正在使用MySQL + Hibernate。 MySQL表名长度和列名长度会影响应用程序性能吗? 例如) 哪个更好 ? 问题答案: 不,它不会,在任何程度上都无法衡量。 花更多的精力使您的架构易于理解。从长远(短期)来看,您获得的收益将超过使用较短且难以理解的模式名称所获得的无法衡量的飞秒。

  • 考虑以下java代码: 此代码输出“”。所以是64字节,而SHA-256是32字节哈希。 我知道我指定了512位(64字节)作为密钥长度 然而,我希望生成的密钥(PBKDF2)将由SHA-256进行散列,这样无论我使用的密钥大小如何,输出都应始终为32字节。 我错过了什么(或者为什么我的期望是错误的)?

  • 假设我定义了两个包(都是perl类和对象) 和 .当上述类的实例访问它们的方法时,会有性能差异吗?我认为“长包名”会导致性能差异,因为perl在方法解析期间会对名称进行字符串比较。 由于在上述方法调用中会有名称解析,第一个(由于名称较短)将比第二个包名方法调用表现出更好的性能。 推测:perl不保留包名的哈希值,并且(在内部)与它们进行比较吗?

  • 问题内容: 在我的公司中,我们有一个包含各种表的遗留数据库,因此包含许多字段。 许多字段似乎都有从未达到的大限制(例如:)。 是否将字段的最大宽度设置为最大宽度或比通常输入的字段大2到3倍会对性能产生负面影响? 一个应如何在性能与字段长度之间取得平衡?有平衡吗? 问题答案: 这个问题有两个部分: 在VARCHAR上使用NVARCHAR是否会损害性能?是的,将数据存储在unicode字段中会使存储需

  • 本文向大家介绍PHP实现的一致性哈希算法完整实例,包括了PHP实现的一致性哈希算法完整实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现的一致性哈希算法。分享给大家供大家参考,具体如下: 希望本文所述对大家PHP程序设计有所帮助。