gpt4 book ai didi

c++ - 顺序独立哈希

转载 作者:行者123 更新时间:2023-11-30 04:22:26 26 4
gpt4 key购买 nike

我正在为键值数据创建键,方法是获取一些(<10)条标识数据的信息,并从中生成一个散列。为此,我一直在使用 CryptoPP 的 SHA256::Update 函数,它允许您一次添加片段:

#include "sha.h"
...
byte outputBuf[CryptoPP::SHA256::DIGESTSIZE];
CryptoPP::SHA256 hash;
hash.Update(pData1, lenData1); // pData* can point to int, double or std::string
hash.Update(pData2, lenData2);
...
hash.Final(outputBuf);

我注意到 Update 的调用顺序很重要(即,如果您更改两个 Update 语句的顺序,您将获得不同的哈希值).我希望这是独立于订单的。所以:

  • CryptoPP 是否提供了执行此操作的方法?
  • 如果不能,您能否推荐一种替代方法?到目前为止,我认为使用 xor 来组合参数是可行的。一个问题是,如果两份数据相同,它们就会相互抵消。你能预见到这方面的问题吗?

最佳答案

如果您认为 {1, 2}{2, 1}不同的输入。我想,你不需要,否则你不会想要一个与顺序无关的散列。所以 h({1, 2}) = h({2, 1}) 没有冲突,因为您提供相同的输入

最简单的解决方案是排序,而不是使用您最喜欢的哈希函数。它与您的哈希函数一样安全(如果您愿意,请在 crypto.stackexchange.com 上确认)。

异或哈希绝对不是一个好主意,因为两个相等的元素相互抵消。添加它们要好得多,但是对于两个相等的元素,最低有效位将为零(对于四个这样的元素,两位将为零,等等)。这可能是可以接受的。

请注意,任何此类方法都非常不安全,因为它可以更快地找到碰撞(根据要求提供证明)。您可能需要也可能不需要安全性,但不要试图发明一种安全的方法,因为这实际上是不可能的(每个著名的哈希函数背后都有许多人工月的分析)。

关于c++ - 顺序独立哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13824992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com