C++ 以不可指示的顺序C+从字符串生成相同的哈希+;

C++ 以不可指示的顺序C+从字符串生成相同的哈希+;,c++,algorithm,hash,C++,Algorithm,Hash,我输入了我的函数字符串列表。 但是对于每个函数调用,这些字符串的顺序可能不同。 我想从这些字符串生成一个散列,但对于不包含顺序的两个字符串,它必须相等。 因此,hello和world的散列必须等于world和hello的散列。 哈希必须是安全的,并且能够抵抗冲突。 我怎么做 注意:我可以从字节数组中获取哈希值,但不排除顺序。您可以使用每个字符的总和作为哈希值: 'h' + 'e' + 'l' + 'l' + 'o' + 'w' + 'o' + 'r' + 'l' + 'd' == 'w' + '

我输入了我的函数字符串列表。 但是对于每个函数调用,这些字符串的顺序可能不同。 我想从这些字符串生成一个散列,但对于不包含顺序的两个字符串,它必须相等。 因此,
hello
world
的散列必须等于
world
hello
的散列。 哈希必须是安全的,并且能够抵抗冲突。 我怎么做


注意:我可以从字节数组中获取哈希值,但不排除顺序。

您可以使用每个字符的总和作为哈希值:

'h' + 'e' + 'l' + 'l' + 'o' + 'w' + 'o' + 'r' + 'l' + 'd' == 'w' + 'o' + 'r' + 'l' + 'd' + 'h' + 'e' + 'l' + 'l' + 'o'

您需要在字节上使用任何位置独立的哈希,或者在单词上使用任何哈希,然后在单词的哈希上使用位置独立的哈希


位置无关散列可以是在交换参数时具有相同结果的任何函数:+、*、xor等。

您对该散列的要求是什么?它需要安全吗?你对冲突有多担心?在生成哈希之前按字母顺序排列字符串列表怎么样?@AlanBirtles,是的,哈希必须是安全的,我为冲突而烦恼你应该将这些要求编辑到你的问题中,特别是因为它使当前发布的两个答案无效安全/冲突问题并不真正相关。选择任何已知的加密散列,该散列包含单个字符串上的运算符。然后在字符串列表上使用此哈希:首先对字符串进行排序(简单的方法是,将每个元素插入一个多集)。然后定义从已排序的字符串列表(或多集)到单个字符串的注入。一个这样的注入:在每个元素之间用分隔符连接排序列表,这些元素不会出现在任何字符串中(例如字符“\0”,根据定义,它不会出现在字符串中)。它安全吗?碰撞怎么办?不,当然不安全。冲突发生在任何类型的散列中,但当然,这种类型的散列在字符串上的冲突可能比位置相关的散列更多。