我正在使用少量(小于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
来组合参数会起作用。 一个问题是如果两个数据相同,它们将抵消。 您能预见这方面的问题吗?
^
在一起。当然,它很糟糕,缺少许多你想要的好哈希的特性,但它是一个无序的哈希。 - Yakk - Adam Nevraumonta + b + (-b) = a
),它是相同的(只是值不同而已)。这就是它的工作原理。 - Damon