加密散列多个密钥

Cryptographically hash multiple keys

如何使用 SHA1(或类似的密码函数)散列 class(或结构) 有多个密钥,例如,

struct Foo{
   string name;
   int age;
   int score;
}

一种天真的方法是 hash(has(name) + hash(age) + hash(score)),但哈希冲突是可能的。

如果它只包含 POD(即内部没有分配任何内容且其 sizeof 是常量),则直接对整个结构进行哈希处理:或者您可以使用 union 来获得正确的字节数组,或者您使用强制转换获得 char* 以提供给哈希函数。

如果您的 struct/class 中有动态数据,您需要序列化所有数据并将它们发送到散列函数 - 显然,由于动态数据,其大小会在执行期间发生变化。但是每个数据结构你必须只调用 hash ONCE,并且在 NO WAY 中将散列加在一起 ​​- 这是胡说八道。 您还可以使用将 struct/class 序列化为文本流(通常是 XML 或 JSON 格式)的框架功能,并哈希此序列化而不是二进制结构。

如何做到这一切显然是 platform-dependent - 如果您愿意,您使用哪种密码学 API。

通过应用这些原则,冲突(完全不可避免,数学证明)不会超过任何其他类型的散列数据。